
246
7
章
オブジェクトアダプタとクラスアダプタ
オブジェクトアダプタとクラスアダプタ
パターンの定義は完了しましたが、まだすべてを説明したわけではありません。
実はアダプタには、オブジェクトアダプタとクラスアダプタという2種類がありま
す。いままで説明したのはオブジェクトアダプタについてで、前のページのクラス
図もオブジェクトアダプタのクラス図です。
それではクラスアダプタとは何であり、なぜクラスアダプタについては説明して
こなかったのでしょうか?
それは、クラスアダプタを実装するには多重継承が必要
なのですが、
Java
では多重継承はできないからです。しかし、だからといって今後
多重継承をサポートしているお気に入りの言語を使う際に、クラスアダプタが必要
にならないとは限りません!
多重継承のクラス図を見てみましょう。
specificRequest()
request()
Adapter
Client
Adaptee
request()
Target
アダプティに適合させるためにコ
ンポジションを使用する代わりに、
ここではアダプタはアダプティと
ターゲットクラスをサブクラス化
します。
見覚えがありますか?
そうです。クラスアダプタではターゲットとアダプ
ティをサブクラス化するのに対し、オブジェクトアダプタではコンポジショ
ンを使ってリクエストをアダプティに渡す点だけが違うのです。
オブジェクトアダプタとクラスアダプタは、アダプティに適
合させるために異なる手段(コンポジションと継承)を使っ
ています。この実装の違いは、アダプタの柔軟性にどのよう ...