結(jié)構(gòu)模式:描述如何將或者對(duì)象組合在一起形成更大的結(jié)構(gòu)。

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


類/對(duì)象的適配器模式:
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

歡迎大家訪問我的個(gè)人網(wǎng)站 萌萌的IT人