Adapterパターン
Adapterパターンは去年知った当時は何をしたいのか、メソッドの内容が分かりやすい割に あんまり分からなかったのだけど、最近少しだけ分かる気がした。
インターネット上に転がっているAmazonの商品情報だったりを取得するために、 外部のAPIを利用するとする。
利用したいAPIを提供しているのは楽天市場だったり、ヤフオクだったりするかもしれない。 とにかく、アプリケーション上で表示とかの処理では、どのAPIから得た情報も合わせて順位付けを行いたい。
Amazonの場合は、値段の列がprice(この辺適当)、商品名がproduct_nameかもしれないし、
楽天市場だったら、値段の列はprice(この辺適当)で共通だけれど、商品名はnameかもしれない。
そもそもAPIで返ってくるデータの構造が、JSONで揃っているか、 JSONの形式が揃っているか(配列かハッシュか...)などは違うかもしれない。
この場合、アプリケーションの表示やソートの処理の部分で、 それぞれのAPIに合わせた処理を書くのは辛い。
本来のソート処理が見えにくくなる。
データの取得元の違いに合わせて、ロジックの中に条件分岐が必要となった、 がAdapterパターンを思い出す条件かもしれない。
上の例の場合、
Amazon APIからデータを取得するクラス(Adaptee) - Amazon APIから取得したデータを整形するクラス(Adapter) ---| 楽天APIからデータを取得するクラス(Adaptee) - 楽天APIから取得したデータを整形するクラス(Adapter) -------+--整形されたデータを利用するクラス(Client) ヤフオクAPIからデータを取得するクラス(Adaptee) - ヤフオクAPIから取得したデータを整形するクラス(Adapter) ---| 3つのAdapterパターンが継承するモジュール(共通部分の処理のみを書き、分岐部分は super の後に書く感じ)(Target)
こういう構成になる気がする。
ここのお話が参考になりました。というか、触発されて書きました。