実際の業務で新しいコードを1から書き始めるなんてことは滅多にありません。基本は既にあるコードを追加・修正しバージョンアップを重ねるという業務がほとんどですね。1から作る場合でも別のプロジェクトからコードを引っ張ってきて、再利用することもありますね。いった作業はプログラミングを行ったことがない人には怠けてるように見えるでしょうか?実はこの作業には「既に問題なく動くことが実績としてある」という大きなポイント・メリットがあります。そのまま再利用できれば一番ですが機能の追加や別のコードとの連携をとるために修正をしなければなりません。いった場合に役に立つデザインパターンが、今回紹介する「Adapterパターン」です。Adapterパターンを考えずに実装してみましょう。Adapterパターンを使ってみよう。「使われる側(Adaptee:適合される)」が提供している動作をしっかりと見極めることです。あなたはどうしても釘を打たなければなりません。手元にはバナナしかありません。提供している動作こういった場合、貴方は「打つ」動作が必要です。(hitメソッド)この都合のいいバナナでも釘を打てば、バナナに穴が開いてしまいますね。そこでAdapterパターン、凍ったバナナ(FrozenBananaクラス)を作り、Hit関数を実装すれば解決できそうです。Adapterパターンを考えずに実装してみましょう。このままでは釘でバナナが破壊されてしまう。このままでは釘でバナナが破壊されてしまう。{System.out.println("swing");}}コメントにもあるようにバナナのまま釘を打てば、バナナが破壊されてしまうのは目に見えています。求める動作「釘を打つ」ことができるようにAdapterパターンを利用して、Bananaを再利用します。Adapterパターンを使ってみよう。Good!!banana.hit();}}オブジェクトBananaを実際に求める動作を定義したTargetインターフェイスに変更し、実装クラスである「凍ったバナナ」を生成しています。実際に「打つ」動作を行っています。{System.out.println("swing");}}ここがポイントです。提供されているBananaには一切手を加える必要がありません。逆に何か修正や追加を行ってしまうと、バグが混入する可能性が発生、つまりはテスト対象になってしまいます。hit();}Targetインターフェイスは求める動作(今回の場合は「打つ」)を定義しています。{super.swing();}}凍ったバナナクラスではバナナクラスで定義していた振るという動作を呼び出すだけになっています。実際にはコンストラクタで水をかけたり、冷凍庫なりに入れる必要があるでしょうか。クラス図さて、ここで一般的なクラス図を見てみましょう。Client:Youクラスが担当しました。Target:Targetインターフェイスが担当しました。Adapter:FrozenBananaクラスが担当しました。Adaptee:Bananaクラスが担当しました。まとめ...ちょっと例が苦しかったでしょうか...。なんとなくでもニュアンスを掴んでいただければいいのですが...。Adapterパターンを利用する最大の利点は何といってもAdapteeクラスのテストを行う必要がない点です。実際に動いてきた実績があるのですから。基本だからこそ登場の機会も多くしっかりと使用できるときを見極める必要がありそうですね。スポンサーリンクスポンサーリンクTwitterFacebookGoogle+PocketB!はてブLINE-デザインパターン-デザインパターン執筆者:piggy関連記事インスタンスが1つしか作られないように制限するSingleton(シングルトン)パターンもっとも頻繁に使われるデザインパターンといえば、Singletonパターンでしょう。このSingletonパターンには、「インスタンスが1つしか作られないことを保証する」という意味が含まれます。...アルゴリズムを定義してロジックはサブクラスに任せるTemplateパターン今回紹介するTemplateパターンは比較的理解しやすいデザインパターンです。車に、缶詰、飲み物などいろいろな工場があります。Iteratorパターンデザインパターンの中でももっとも理解がしやすく、また利用価値も高いものでIteratorパターンがあります。Iteratorパターンは数え上げのためのパターンです。