Adapterアダプター-デザインパターン勉強メモ

Adapterアダプター 『adapt(適合)させるもの』という意味。
『すでに用意されているもの』を『使える形』にするためのデザインパターンだと理解しています。


増補改訂版Java言語で学ぶデザインパターン入門のAdapterの章でとても分かりやすい例を使って説明されていたのでパクらせて頂き、自分の言葉で説明してみる。
ノートパソコンを使うときは電源が必要です。でも、『すでに用意されているもの』である交流100Vをそのまま使用することはできません。直流10.5Vとか直流12Vとかの『使える形』にする必要があります。具体的にはACアダプターを使いますが、プログラムの話に戻した場合、その役割を果たすのがAdapterアダプターデザインパターンです。間違って解釈してたらごめんなさい。


『継承』を使ったものと、『委譲』を使ったものがあります。
簡単なやつを作ってみます。

クラス 説明
Print.java インタフェース
PrintHello.java 『使える形』にするためのクラス
Hello.java 『すでに用意されているもの』のクラス
Main.java ちゃんとできているかテスト用クラス

継承を使った方法

Print.java
  1 public interface Print {
  2   public void print();
  3 }   
PrintHello.java
  1 public class PrintHello extends Hello implements Print {
  2   public PrintHello() {
  3   } 
  4   public void print() {
  5     hello();
  6   }
  7 }
Hello.java
  1 public class Hello {
  2   public Hello() {
  3   } 
  4   public void hello() {
  5     System.out.println("Hello World");
  6   }
  7 }
Main.java
  1 public class Main {
  2   public static void main(String[] args) {
  3     Print p = new PrintHello();
  4     p.print();
  5   } 
  6 } 

試してみる。

$ java Main
Hello World

委譲を使った方法

Print.java
  1 public interface Print {
  2   public void print();
  3 }
PrintHello.java
  1 public class PrintHello implements Print {
  2   public PrintHello() {
  3     Hello h = new Hello();
  4   }
  5   public void print() {
  6     h.hello();
  7   }
  8 }
Hello.java
  1 public class Hello {
  2   public Hello() {
  3   } 
  4   public void hello() {
  5     System.out.println("Hello World");
  6   } 
  7 }
Main.java
  1 public class Main {
  2   public static void main(String[] args) {
  3     Print p = new PrintHello();
  4     p.print();
  5   } 
  6 } 

試してみる。

$ java Main
Hello World

学習教材

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

Javaデザインパターン徹底攻略 (標準プログラマーズライブラリ)

Javaデザインパターン徹底攻略 (標準プログラマーズライブラリ)

2008年12月23日追記

・てか、結城さんの例えが秀逸。
・継承と委譲の2種類があるけど、やってることは一緒だよ。