😵

Adapterパターンを振り返る

2023/06/14に公開

Adapterパターンとは

Adaptorパターンとは2つの異なる互換性のないものを、連携させるパターン。
簡単にいうと仲介役という認識で大丈夫です。

また、本来のクラスのインターフェースとは異なるインターフェースを提供させることができます。
つまりはインターフェースを変更する事が可能。

Adapterパターンの使いどころ

既存の互換性のない設計で作られているものを、自分が扱っているシステムで動かしたい場合

Adapterパターンのメリット

  • 既存のものを修正せずに、新しいインターフェースを実装できるので柔軟性と再利用性の向上
  • 新旧システム間の連携を実現が可能
  • 既存のものをテストする必要が無い

Adapterパターンのデメリット

正直ほぼ無いに等しいですが、敢えて挙げるなら下記。

  • コードは増える
  • 過度に使用するとコードの複雑性が上がる

実装例

実装方法は"委譲"と"継承"の2種類ありますが、最初はどっちでもいいのでわかりやすい方を選択すればいいと思います。

委譲のパターンの実装例は下記です。

// 手を加えたくない/加えられない、既存のクラス
class Adaptee {
    public void oldMethod() {
        System.out.println("hello world");
    }
}

// 新しいインタフェース
interface Target {
    void newMethod();
}

// アダプター
class Adapter implements Target {
    private Adaptee adaptee;

    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    public void newMethod() {
        adaptee.oldMethod();
    }
}

// アダプターを用いるメインのコード
public class Main {
    public static void main(String[] args) {
        Adaptee adaptee = new Adaptee();
        Target adapter = new Adapter(adaptee);
        adapter.newMethod(); // → "hello world"
    }
}

まとめ

Adapterパターンを用いれば、
仕様の違いを吸収するのに使ったりと簡単で色々と応用出来る場所は多いと思います。

参照

https://doriven.hatenablog.com/entry/2014/05/31/002645

https://tech-lab.sios.jp/archives/26913

http://xoxopigs.com/adapter_pattern

https://dokuro.moe/design-pattern-adapter/#starting_considering

Discussion