概括
|
名稱 |
Adapter |
|
結構 |
|
|
動機 |
將一個類的介面轉換成客戶希望的另外一個介面。Adapter 模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。 |
|
適用性 |
-
你想使用一個已經存在的類,而它的介面不符合你的需求。
-
你想建立一個可以複用的類,該類可以與其他不相關的類或不可預見的類(即那些介面可能不一定相容的類)協同工作。
-
(僅適用於對象Adapter )你想使用一些已經存在的子類,但是不可能對每一個都進行子類化以匹配它們的介面。對象適配器可以適配它的父類介面。
|
解析
形象比喻:
ADAPTER—在朋友聚會上碰到了一個美女Sarah,從香港來的,可我不會說粵語,她不會說普通話,只好求助於我的朋友kent了,他作為我和Sarah之間的Adapter,讓我和Sarah可以相互交談了(也不知道他會不會耍我)
適配器(變壓器)模式:把一個類的介面變換成用戶端所期待的另一種介面,從而使原本因介面原因不匹配而無法一起工作的兩個類能夠一起工作。適配類可以根據參數返還一個合適的執行個體給用戶端。
1.Target
定義Client使用的與特定領域相關的介面。
2.Client
與符合Target介面的對象協同。
3.Adaptee
定義一個已經存在的介面,這個介面需要適配。
4.Adapter
對Adaptee的介面與Target介面進行適配
一言蔽之,就是在一個類的執行個體中可以調用另一個類的執行個體的方法。
執行個體
涉及的檔案有:
Target.java - 調用的介面
Adaptee.java - 被適配的類
Adapter.java - 適配的類,(被適配的類的執行個體作為此類執行個體的一個屬性)
TestMain.java
/** * @author oscar999 * @date 2013-7-23 * @version V1.0 */package designptn.adapter;public interface Target {void adapteeMethod();void adapterMethod();}
/** * @author oscar999 * @date 2013-7-23 * @version V1.0 */package designptn.adapter;public class Adaptee {public void adapteeMethod() {System.out.println("Adaptee Method!");}}
/** * @author oscar999 * @date 2013-7-23 * @version V1.0 */package designptn.adapter;public class Adapter implements Target {private Adaptee adaptee;public Adapter(Adaptee adaptee){this.adaptee = adaptee;}@Overridepublic void adapteeMethod() {// TODO Auto-generated method stubadaptee.adapteeMethod();}@Overridepublic void adapterMethod() {// TODO Auto-generated method stubSystem.out.println("Adapter Method!");}}
/** * @author oscar999 * @date 2013-7-23 * @version V1.0 */package designptn.adapter;public class TestMain {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubTarget target = new Adapter(new Adaptee());target.adapteeMethod();target.adapterMethod();}}