KICK THE DP

KICK THE CAN CREWでデザインパターンを攻略するブログ

Ch.2 KICK THE ADAPTER

【目標】

Adapterパターンを使用して、小西真奈美(女優)にラップさせよう。

①継承を使った場合(クラスによるAdapterパターン)

【クラス図】

f:id:mikeera2:20160903011346p:plain

【実装】

≪Rapperクラス:Adaptee≫

f:id:mikeera2:20160921175115p:plain

<IActressインターフェース:Target>

f:id:mikeera2:20160921175841p:plain

≪ActressToRapperAdapterクラス:Adapter≫

f:id:mikeera2:20160921180335p:plain

[Mainクラス:Client]

f:id:mikeera2:20160921183433p:plain

【出力結果】

f:id:mikeera2:20160921183515p:plain

②委譲を使った場合(インスタンスによるAdapterパターン)

【クラス図】

f:id:mikeera2:20160903012550p:plain

≪Rapperクラス:Adaptee≫

f:id:mikeera2:20160921180541p:plain

<Actress抽象クラス:Target>

f:id:mikeera2:20160921180724p:plain

≪ActressToRapperAdapterクラス:Adapter≫

f:id:mikeera2:20160921181302p:plain

[Mainクラス:Client]

f:id:mikeera2:20160921181434p:plain

【出力結果】

f:id:mikeera2:20160921183529p:plain

【メモ】

・①も②もmanamiKonishi.Work()の主体(manamiKonishi)の正体はアダプターであることを意識してないとこんがらがる。現実世界のアダプターと異なり、仲介者が主体となることを意識すべきか。

・Adapterパターンを実装するためだけに①のように新しいインターフェースを作るのは多少違和感がある