はじめに
Java言語で学ぶデザインパターン入門を読んで勉強中です。
備忘録としてAdapterパターンについて書きました。
Adapterパターン
Adapter パターンは、既存のクラスを変更せずに新しいインターフェースに適応させるためのデザインパターンです。Java の Adapter パターンを使って、どのように既存のコードを変更せずに新しいシステムに適応させるかを書いてみます。
背景(例)
プロジェクトで新しいシステムが導入され、すべての動物クラスが特定のインターフェースを実装する必要があるとします。しかし、すでにあるCatという古いクラスは、このままでは新システムに適応できません。
そこで登場するのが Adapter パターン です。これを使えば、既存のCatクラスをそのまま活用しつつ(修正しない)、新しいインタフェースを適応することができます。
1. 新しいシステムで求められるインタフェース
新しいシステムでは、全ての動物クラスが以下のインタフェースを実装して、cryメソッドで鳴き声をあげることが求められます。
interface Animal {
void cry();
}
このインターフェースを実装することで、すべての動物クラスは一貫した使い方を提供します。
2. Catクラス
次に、すでにあるCatクラス。Catは bark() というメソッドを使って鳴き声をあげますが、これはAnimalのcry()とは異なります。
class Cat {
private String name;
public Cat(String name) {
this.name = name;
}
public void bark() {
System.out.println(name + "がニャーと鳴く");
}
}
3. Adapter パターンの導入
Adapter パターンを使ってCatをAnimalに適応させるためAnimalAdapterクラスを作成します。このクラスは、Catを内部でラップし、Animalインターフェースを実装します。
// Adapter クラス(Cat を Animal に適応させる)
class AnimalCat extends Cat implements Animal {
public AnimalCat(String name) {
super(name);
}
@Override
public void cry() {
bark(); // barkメソッドを内部で呼ぶ
}
}
4. 使ってみる
次に、main メソッドでCatをAnimalCatを使って新しいシステムに適応させます。
public class Main {
public static void main(String[] args) {
// Adapterパターンを使って、Animalインタフェースに適応させる
Animal animal = new AnimalCat("トラ");
// 新システムのcryを使う
animal.cry();
}
}
出力結果
トラがニャーと鳴く
Catクラスを修正せず、Animalインタフェースに適応させることができました!
終わり
Adapterパターンは、既存のコードを変更せず新しいインターフェースに適応できます。
Catをそのまま使いつつ、新しいシステムに統一された方法でニャーと鳴かせることができました。
実際の開発では、まだ使ったことないのでメリットがピンときませんが、知っておかないといけないかなと思い書きました