Adapter-皮をかぶせて再利用-
Java言語で学ぶデザインパターン入門 の第2章を参考にしました。
Adapterパターンとは
本書には以下のように記載されています。
「既に提供されているもの」と「必要なもの」の間のズレを埋めるようなデザインパターン
Adapterの元である「adapt」という単語には、「適合させる」という意味があります。 Adapterという言葉は、身近では、「ACアダプター」という言葉でよく耳にすると思います。 これは、コンセントに流れている交流(既に提供されているもの)を直流(必要なもの)に変換しています。 これがAdapterの役割です。
Adapterパターンの登場人物
登場人物 | 役割 | ノートPCの例 |
---|---|---|
Target (対象) |
今必要となっているメソッドを定める | 直流12ボルト |
Client (依頼者) |
Targetのメソッドを使うもの | ノートPC |
Adaptee (適合される側) |
既に用意されたメソッドを持っている | 交流100ボルト |
Adapter (変換) |
Adapteeのメソッドを使って、 Targetのメソッドを満たす |
ACアダプター |
実装
Adapterパターンでは、継承による実装とインスタンスによる実装の2種類があります。 詳しくは、こちらを参考にしてください。
この実装では、Bannerクラスを「既に提供されているもの」、Printインターフェースが「必要なもの」とし、 Printインターフェースの実装であり、Bannerクラスを継承したPrintBannerクラスがアダプターの役割を担っています。 (継承による実装の場合)
なぜAdapterパターンを使うのか?
このような実装のどこが良いのでしょうか? それは、既に存在しているクラスを再利用できることです。 今回の例では、Bannerクラスもこのために実装しましたが、 Bannerクラスが十分にテストされ、バグが少なく、これまでにも実際に使われてきた実績があると仮定したなら、 そのままの形でBannerクラスを再利用したいですよね。
実装のために既存クラス(Bannerクラス)を修正してしまうと、動作テストが済んでいる既存クラスをもう一度テストしなければなりません。 Adapterパターンでは、既存クラスをラップするようなクラス(PrintBannerクラス)を作るので、 もしバグが見つかっても、既存クラスはバグなく動くことが保証されているので、ラップしたクラスのみを検証すれば良いということになります。
まとめ
クラスの再利用はとても大事