the dawn of yuriko hisory

アニメやら漫画関係で何か作りたいものと勉強したことのメモ用

アイマスでデザインパターン Adapter

GitHubリンク

実装クラス一覧

IdolMaster - すべての作品をアイドルマスターとして取り扱うためのインターフェース
MillionLive - すでに実装がされているミリオンライブクラス
CinderellaGirls - すでに実装がされているシンデレラガールズクラス

今回はミリオンとシンデレラ両者がすでに実装されているが、アイドルマスターとしてともに扱いたい。
しかし、既存のクラスを変更はできないといった状態。
そのため、間にクラスを挟んで実装を行う
以下がそのクラス

IdolMasterMillionLive - ミリオンライブをアイドルマスターとして扱うためのAdapter
IdolMasterCinderellaGirls - シンデレラガールズアイドルマスターとして扱うためのAdapter

各クラス

IdolMaster
public interface IdolMaster {
        // あいさつするだけ
	public abstract void aisatu();
}
MillionLive
public class MillionLive {
  // キャラ名
  private String name;

  // 中の人
  private String cv;

  // ミリオンライブ
  public MillionLive(String name, String cv) {
    this.name = name;
    this.cv = cv;
  }

  // 挨拶 みりっほー
  public void mirihho() {
    System.out.println("ミリオンライブ" + this.name + "役の" + this.cv + "です。");
  }

}
CinderellaGirls
public class CinderellaGirls {
  // キャラ名
  private String name;

  // 中の人
  private String cv;

  // ミリオンライブ
  public CinderellaGirls(String name, String cv) {
    this.name = name;
    this.cv = cv;
  }

  // 挨拶 でれっす
  public void mirihho() {
    System.out.println("シンデレラガールズ" + this.name + "役の" + this.cv + "です。");
  }

}
IdolMasterMillionLive
public class IdolMasterMillionLive extends MillionLive implements IdolMaster{

  // super()を使用して名前とCVをセット
  public IdolMasterMillionLive(String name, String cv) {
    super(name, cv);
  }

  // あいさつ
  @Override
  public void aisatu() {
    // 親クラスのメソッドをそのまま使用する
    mirihho();
  }
}
IdolMasterMillionLive
public class IdolMasterCinderellaGirls extends CinderellaGirls implements IdolMaster{

  // super()を使用して名前とCVをセット
  public IdolMasterCinderellaGirls(String name, String cv) {
    super(name, cv);
  }

  // あいさつ
  @Override
  public void aisatu() {
    // 親クラスのメソッドをそのまま使用する
    deressu();
  }
}

動作確認

public static void main() {

  IdolMaster million = new IdolMasterMillionLive("箱崎星梨花", "麻倉もも");
  million.aisatu();

  IdolMaster cinderella = new IdolMasterCinderellaGirls("島村卯月", "大橋彩香");
  cinderella.aisatu();

}

実行結果

ミリオンライブ箱崎星梨花役の麻倉ももです。
シンデレラガールズ島村卯月役の大橋彩香です。

IdolMaserインタフェースを実装したので、これでアイドルマスターとしてミリオンとデレマスがアイドルマスターとしてともに扱うことが可能になる。
親クラスを継承したことによって、元のメソッドの挙動も変えずに済んでいる。