0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【デザインパターン】Adapterパターンについての備忘録

Last updated at Posted at 2024-09-29

概要

アダプターパターンは、互換性のないインターフェースを持つクラス同士を接続するためのデザインパターンである。異なるインターフェースを持つオブジェクトを使いたい場合、アダプタークラスを介して既存のクラスを新しいインターフェースに適合させる

利用目的

アダプターパターンは、既存のクラスを再利用しつつ、そのクラスのインターフェースを変更したい場合に使用される。例えば、新しいインターフェースに合わせて既存のクラスを使いたいが、元のクラスを直接変更したくない場合に有効である。特に、異なるライブラリや API を統合する際に便利である。

注意点

アダプターパターンは、既存のクラスに依存しているため、クラスの内部構造や動作に変化があった場合、アダプターも修正が必要になることがある。また、複雑なアダプターを作ると、設計が不必要に複雑になる場合があるため、単純な解決策で済むならばアダプターパターンを使用するべきではない

実装

Target
// クライアントが使用するインターフェース
public interface Target {
    void request();
}
Adaptee
// 既存のクラス。異なるインターフェースを持つ
public class Adaptee {
    public void specificRequest() {
        System.out.println("AdapteeのspecificRequestが呼び出された");
    }
}
Adapter
// アダプタークラス。TargetインターフェースにAdapteeを適合させる
// 【注意】新インターフェースを implements する!
public class Adapter implements Target {
    //【 既存のクラス Adaptee を所有する!】
    private Adaptee adaptee;

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

    @Override
    public void request() {
        // 【新インターフェースのメソッド内で既存クラスのメソッドを呼び出す!】
        adaptee.specificRequest();
    }
}
App
// Mainクラス
public class App {
    public static void main(String[] args) {
        Adaptee adaptee = new Adaptee();
        Target adapter = new Adapter(adaptee);

        // クライアントはTargetインターフェースを通してアダプティのメソッドを使う
        adapter.request();
    }
}

クラス図

adapter_class_diagram.jpg

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?