Design Pattern | Adapter Pattern(アダプターパターン)
Adapterパターンとは?
- Adapterという英単語は、適合させるものという意味である。
- Adapterパターンは、すでに提供されているものをそのまま使えない場合に、必要な形へ変換して利用するための方式である。つまり、インターフェースを変更するための方式である。
- アダプターは、電圧が合わないときに間に接続する変換プラグを考えるとよい。
- パターンでも、両側に互いに合わないインターフェースがあるなら、この2つをつなげるBridgeを作ればよい。
- 継承を利用する方法と委譲を利用する方法がある。
- クラスによるAdapter Pattern
- 継承を利用したAdapter Patternである。
- インスタンスによるAdapter Pattern
- 委譲を使用したAdapter Patternである。
- クラスによるAdapter Pattern
- ラッパーパターンとも呼ばれる。ラッパーは包むものを意味する。
- GoFのデザインパターンでは、構造に関するデザインパターンに分類される。
Adapterパターンのサンプルプログラム
学生の名前と年齢を表示するサンプルプログラムである。
1. クラス継承を利用した方法
Class Diagram

1-1. Humanクラス
もともと提供されたクラスである。
Human.java
package com.devkuma.designpattern.structural.adapter.ex1;
public class Human {
private String name;
private int age;
public Human(String name, int age) {
this.name = name;
this.age = age;
}
public void printName() {
System.out.println(name);
}
public void printAge() {
System.out.println(age);
}
}
1-2. Studentインターフェース
必要なインターフェースである。
Student.java
package com.devkuma.designpattern.structural.adapter.ex1;
public interface Student {
void showName();
void showAge();
}
1-3. HumanAdapterクラス
Adapter役となるクラスである。
HumanAdapter.java
package com.devkuma.designpattern.structural.adapter.ex1;
public class HumanAdapter extends Human implements Student {
public HumanAdapter(String name, int age) {
super(name, age);
}
public void showName() {
printName();
}
public void showAge() {
printAge();
}
}
1-4. Mainクラス
メイン処理を実行するクラスである。
Main.java
package com.devkuma.designpattern.structural.adapter.ex1;
public class Main {
public static void main(String[] args) {
Student student = new HumanAdapter("devkuma", 25);
student.showName();
student.showAge();
}
}
1-5. 実行結果
devkuma
25
2. 委譲を利用した方法

2-1. Humanクラス
もともと提供されたクラスである。
Human.java
package com.devkuma.designpattern.structural.adapter.ex2;
public class Human {
private String name;
private int age;
public Human(String name, int age) {
this.name = name;
this.age = age;
}
public void printName() {
System.out.println(name);
}
public void printAge() {
System.out.println(age);
}
}
2-2. Studentインターフェース
必要なインターフェースである。
Student.java
package com.devkuma.designpattern.structural.adapter.ex2;
public interface Student {
void showName();
void showAge();
}
2-3. HumanAdapterクラス
Adapter役となるクラスである。
HumanAdapter.java
package com.devkuma.designpattern.structural.adapter.ex2;
public class HumanAdapter implements Student {
private Human human;
public HumanAdapter(String name, int age) {
this.human = new Human("田中", 25);;
}
public void showName() {
human.printName();
}
public void showAge() {
human.printAge();
}
}
2-4. Mainクラス
メイン処理を実行するクラスである。
Main.java
package com.devkuma.designpattern.structural.adapter.ex2;
public class Main {
public static void main(String[] args) {
Student student = new HumanAdapter("devkuma", 25);
student.showName();
student.showAge();
}
}
2-5. 実行結果
devkuma
25
Adapterパターンのメリット
Adapterパターンは、既存クラスに皮をかぶせ、必要なクラスを作る。このパターンを使うと、必要なメソッド群を素早く作ることができる。
もしバグが検出されたとしても、既存クラスが十分にテストされているなら、Adapter役のクラスを重点的に調査すればよくなるため、プログラムのチェックが楽になる。
また、Adapterパターンを使えば既存クラスに手を加えずに機能を実装できるため、既存クラスを再テストする手間を減らせる。