定義:將一個接口轉換成客戶指望的另外一個接口,讓不兼容的類能夠合做無間java
有過作接口工做經驗的朋友,應該會很熟悉這種方式,就是開發一個新接口封裝現有的能力提供給別人,只是本身不知道是適配器模式而已編程
適配對象封裝被適配對象和其行爲(組合),相似裝飾者模式和命名模式,但裝飾者模式是一樣的接口,封裝後新增責任,命令模式是利用這種方式封裝出命令對象,將對象參數化調用者,讓調用者和執行者解耦。看到這裏是否是有點頭暈。。。那就看看我前面的博文吧「命令模式」「裝飾者模式」ide
要點:
1.當須要實用一個現有的類,而其接口並不符合你的需求時,採用適配器模式。this
2.適配器改變接口以符合客戶的指望.net
3.實現一個適配器可能須要一番功夫,也可能不費功夫,是目標接口的大小與複雜度而定。code
4.適配器有兩種模式,類適配器和對象適配器,對象適配器更具彈性對象
實現:blog
早期Java 集合類有Enumeration進行迭代,後來通過更新有了Iterator,如今新代碼要求之前的迭代方式不能再使用,而不修改原來的代碼,因此提供適配器EnumerationIterator繼承
package com.jv.designpattern.adapter; import java.util.Enumeration; import java.util.Iterator; public class EnumeratorIterator implements Iterator<Object> { Enumeration en ; public EnumeratorIterator(Enumeration en) { this.en = en; } @Override public boolean hasNext() { return en.hasMoreElements(); } @Override public Object next() { return en.nextElement(); } public void remove() { throw new UnsupportedOperationException(); } }
截止目前涉及到的模式都擺脫不了這些涉及原則:接口
1.封裝變化
2.多用組合,少用繼承
3.針對接口編程,不針對實現編程
4.爲交互對象之間的鬆耦合而努力
5.類應該對擴展開放,對修改關閉
6.依賴抽象,不要依賴具體類
7.只是最小化原則,意思就是讓對象依賴更少的對象