<一覧に戻る

アダプタパターン

アダプタパターンは、互換性のないインターフェースを持つクラス同士を接続するためのデザインパターンです。このパターンを使用すると、クライアントが期待するインターフェースを提供しつつ、既存のクラスを再利用することができます。

アダプタパターンの目的

  • 既存のクラスを変更せずに異なるインターフェースを持つクラスを連携させる
  • クライアントコードの変更を最小限に抑える
  • 再利用性を高める

アダプタパターンの構成要素

  1. ターゲット (Target): クライアントが期待するインターフェース。
  2. アダプター (Adapter): ターゲットのインターフェースを実装し、適切に既存クラスのメソッドを呼び出す。
  3. アダプティ (Adaptee): アダプターが適合させる既存クラス。

サンプルコード

次に、アダプタパターンのサンプルコードを見ていきましょう。この例では、異なる電圧の電源を接続する際にアダプタパターンを適用します。

1. ターゲットインターフェースの定義

まず、クライアントが期待するインターフェースを定義します。

class Target:
    def request(self):
        pass

2. アダプティクラスの定義

次に、既存のクラス(アダプティ)を定義します。このクラスは異なるインターフェースを持っています。

class Adaptee:
    def specific_request(self):
        return "特定のリクエストが処理されました"

3. アダプタークラスの実装

アダプタークラスを実装し、ターゲットインターフェースを実現します。

class Adapter(Target):
    def __init__(self, adaptee):
        self.adaptee = adaptee

    def request(self):
        return self.adaptee.specific_request()

4. クライアントコードの実装

最後に、クライアントコードを実装します。アダプターを通じてアダプティを使用します。

def client_code(target):
    print(target.request())

# クライアントの実行
adaptee = Adaptee()
adapter = Adapter(adaptee)
client_code(adapter)

コードの解説

  1. ターゲットクラス (Target):
  2. request メソッドを持つインターフェースを定義しています。

  3. アダプティクラス (Adaptee):

  4. specific_request メソッドを持ち、クライアントが直接呼び出すことはできません。

  5. アダプタークラス (Adapter):

  6. ターゲットインターフェースを実装し、Adaptee のインスタンスを受け取ります。
  7. request メソッド内で、specific_request を呼び出しています。

  8. クライアントコード (client_code):

  9. アダプターを使ってリクエストを処理します。これにより、クライアントはアダプティを知らずに機能を利用できます。

まとめ

アダプタパターンを使用することで、異なるインターフェースを持つクラス同士を連携させることができます。このパターンは既存のコードを変更せずに新しい機能を追加する際に非常に有用です。

出力結果: