イメージ
Client
利用者
ターゲットインターフェース
「望みの規格」になります。インターフェースか抽象クラスなどで実装します。
Adapter
適合させる側、ターゲットインターフェースを継承させて作ります。
Adaptee
適合される側。具象クラスをそのまま使っても良いですが、Adapteeインターフェースを一旦かまして複数の同じような具象クラスを継承させて実装することも可能だったりします。
AdapterとAdapteeの接続方法
AdapterとAdapteeの接続方法には2種類の実装方法があります。結論から申しますと「コンポジションを使った実装が良い」です。
コンポジションを使う方法
「持つ」手法。Adapter内にAdapteeのコードをメンバ変数としてコンポジションで持たせます。
継承を使う方法
「Class Adapterパターン」とも言われます。
Adapter内でAdapteeのコードを継承させて実装します。
なぜコンポジションの方が良いのか
そもそも近年の設計では具象クラスを継承することは推奨されていない
そもそも、近年は具象クラスを継承することはあまり推奨されていないです。(スーパークラスを読まないとサブクラスの内容を理解できないので開発者の負荷が増えるなどが理由だったりします。)
ターゲットインターフェースに選択肢が生まれる
二重継承が禁止されている言語もあるので、その場合はターゲットインターフェースがインターフェースにしかできません。(抽象クラスを選べない。)
「Adapter:Adaptee=1:多」にすることもできる。
メンバ変数ならインターフェースをメンバの型として使えるのでAdapteeを複数に拡張性が生まれます。
この記事へのコメントはありません。