「Adapter」という英単語は、「適合させるもの」という意味です。
互換性のないインタフェースを持つメソッド間の相違を、埋めるような(適合させる)パターンが、「Adapter パターン」です。つまり、「Adapter パターン」は、ある任意の機能のインタフェースを変更することなく、他クラスが提供している新しい機能を使用できるようにするパターンです。
このパターンには、以下の2つの実装方法があります。
Adapterパターンのクラス図
■1.継承(is a 関係)を利用した方法 ・・・「Target」がインタフェースとして提供されている場合
1. Client.java
public class Client {
public static void main(String[] args){
Target target = new Adapter();
target.targetMethod1();
target.targetMethod2();
}
}
2. Target.java
public interface Target {
public abstract void targetMethod1();
public abstract void targetMethod2();
}
3. Adaptee.java
public class Adaptee {
public void method1(){
System.out.println("method1");
}
public void method2(){
System.out.println("method2");
}
}
4. Adapter.java
public class Adapter extends Adaptee implements Target {
public void targetMethod1(){
method1();
}
public void targetMethod2(){
method2();
}
}
■2.委譲(has a 関係)を利用した方法 ・・・「Target」が抽象クラスとして提供されている場合
1. Client.java(「1.継承」と同様)
public class Client {
public static void main(String[] args){
Target target = new Adapter();
target.targetMethod1();
target.targetMethod2();
}
}
2. Target.java
public abstract class Target {
public abstract void targetMethod1();
public abstract void targetMethod2();
}
3. Adaptee.java(「1.継承」と同様)
public class Adaptee {
public void method1(){
System.out.println("method1");
}
public void method2(){
System.out.println("method2");
}
}
4. Adapter.java
public class Adapter extends Target {
private Adaptee adaptee;
public Adapter(){
this.adaptee = new Adaptee();
}
public void targetMethod1(){
adaptee.method1();
}
public void targetMethod2(){
adaptee.method2();
}
}
1.継承を利用した方法
C:\sample\desin_pattern\adapter1>javac Client.java [Enter] C:\sample\desin_pattern\adapter1>java Client [Enter] method1 method2
2.委譲を利用した方法
C:\sample\desin_pattern\adapter2>javac Client.java [Enter] C:\sample\desin_pattern\adapter2>java Client [Enter] method1 method2