開発日記3:【Java】インタフェース

いまだに意味がわかりません。

どうやら店舗がいろんな洗濯機を持っている状況下で、抽象的に洗濯機としてあげてからの、洗濯機一覧を取得してあげると効果が発揮されるらしい。

まだ意味がちんぷんかんぷんだが、使い方については分かった気がするので個人的にメモ。

ポイント

1.インタフェースは抽象化のために使う。
2.洗濯機インタフェースを実装したクラスは、洗濯機を意味する。
3.List<洗濯機> 洗濯機一覧 = 店舗.get洗濯機();と書きたい。
4.店舗は洗濯機を持っている。
5.インタフェースは型の定義。

【目的】何の洗濯機かは知らない(=抽象化)けど、店舗はいくつ洗濯機持っているのかを知ること。

【機能用件】
①店舗が建設された後でも洗濯機を増やせること。
②お客様は店舗に洗濯機がいくつあるかいつでも確認できる

1-1 洗濯機一覧を取得するため、店舗に洗濯機リストを持たせゲッターを付与。
1-2 店舗コンストラクタで洗濯機を追加する準備をし、洗濯機を追加するメソッドを作った。
1-3 インタフェースを実装した*2各クラスを洗濯機としてみなした(=型の定義)。
1-4 洗濯機を店舗に追加した(=ポリモーフィズムの利用による抽象化)。
1-5 やりたいことであった洗濯機一覧を取得(=List<洗濯機> 洗濯機一覧 = 店舗.get洗濯機();)した。

interface WashingMachine{ //洗濯機インタフェース
void wash();
void dry();
void dehydrate(); //脱水する
}
public class WashCloths implements WashingMachine{
//本来洗濯機インタフェースのメソッドがオーバーライドされています。
}
public class WashBoots implements WashingMachine{・・・}
public class WashFuton implements WashingMachine{・・・}

/*
洗濯機は1つか2つ以上か分からないため、どちらにも対応できる様実装。
具体的には店舗が作られた段階でリストを生成し、
そこに追加する形にすることで、1個でも2個以上でも対応可能。
*/
public class Shop{
private List<WashingMachine> machines;

public Shop(){
List<WashingMachine> = new ArrayList<>();
}

public void addWashingMachine(WashingMachine item){
machines.add(item);
}

public List<WashingMachine> getWashingMachine(){
return machines;
}
}

/*
インタフェース型オブジェクトをshopにaddした後、洗濯機一覧を取得する。
*/
public class Main{
Shop shop = new Shop();
WashingMachine cloths = new WashCloths();
WashingMachine boots = new WashBoots();
WashingMachine futon = new WashFuton();
shop.addWashingMachine(cloths);
shop.addWashingMachine(boots);
shop.addWashingMachine(futon);
List<WashingMachine> machines = shop.getWashingMachine();
}

 

一応プロに見てもらったところちゃんと表現できてるとのお言葉頂いたが、俺は初心者だからそんなわけがない。・・・

変なコード書いているに決まってる。あー難しい。とにかく勉強勉強

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA