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