結構模式:描述如何將或者對象組合在一起形成更大的結構。

適配器模式:把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。
使用場合
1)系統需要使用現有的類,而此類的接口不符合系統的需要。
2)想要建立一個可以重復使用的類,用于與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。這些源類不一定有很復雜的接口。
3)(對對象的適配器模式而言)在設計里,需要改變多個已有的子類的接口,如果使用類的適配器模式,就要針對每一個子類做一個適配器類,而這不太實際。


類/對象的適配器模式:
1. com.cleversoft.designpatterns.adapter.Target.java:
package?com.cleversoft.designpatterns.adapter;

public?interface?Target?{
????
public?void?request();
}

2. com.cleversoft.designpatterns.adapter.Adaptee.java:
package?com.cleversoft.designpatterns.adapter;

public?class?Adaptee?{
????
public?void?specificRequest()?{
????????System.out.println(
"Adaptee:?SpecificRequest");
????}

}

3. com.cleversoft.designpatterns.adapter.ClassAdapter.java:
package?com.cleversoft.designpatterns.adapter;

public?class?ClassAdapter?extends?Adaptee?implements?Target?{
????
public?void?request()?{
????????specificRequest();
????}

}

4. com.cleversoft.designpatterns.adapter.ObjectAdapter.java:
package?com.cleversoft.designpatterns.adapter;

public?class?ObjectAdapter?implements?Target?{
????
private?Adaptee?adaptee;

????
public?ObjectAdapter(Adaptee?adaptee)?{
????????
this.adaptee?=?adaptee;
????}


????
public?void?request()?{
????????adaptee.specificRequest();
????}

}

5. com.cleversoft.designpatterns.adapter.Client.java:
package?com.cleversoft.designpatterns.adapter;

public?class?Client?{

????
public?static?void?main(String[]?args)?{
????????System.out.println(
"Object?Adapter");
????????Adaptee?adaptee?
=?new?Adaptee();
????????ObjectAdapter?objectAdapter?
=?new?ObjectAdapter(adaptee);
????????objectAdapter.request();

????????System.out.println(
"Class?Adapter");
????????ClassAdapter?classAdapter?
=?new?ClassAdapter();
????????classAdapter.request();
????}


}


參考資料:
1. 《Java與模式》
2. Thinking in Patterns

歡迎大家訪問我的個人網站 萌萌的IT人