適配器模式的定義是:將一個類的接口,轉換成客戶指望的另外一個接口,適配器讓本來接口不兼容的類能夠做無間。看下如下兩張圖就更清楚了java
適配器能夠實現接口的解耦,若是過一段時間後,廠家想改變接口,適配器能夠把改變的部分封裝起來,用戶就不須要跟着接口改變而改變,只要改變適配器就好了。ide
有這樣一個需求:有一個鴨子類和一個火雞類,我想用火雞對象來冒充鴨子,但火雞和鴨子的方法不徹底同樣,這時就須要一個轉換器測試
Duck.java鴨子接口this
package com.dzt.adapter; public interface Duck { public void quack(); public void fly(); }
Turkey.java火雞接口對象
package com.dzt.adapter; public interface Turkey { public void gobble(); public void fly(); }
實現一個鴨子類MallardDuck.java接口
package com.dzt.adapter; public class MallardDuck implements Duck { @Override public void quack() { // TODO Auto-generated method stub System.out.println(MallardDuck------------------>quack); } @Override public void fly() { // TODO Auto-generated method stub System.out.println(MallardDuck------------------>fly); } }
實現一個火雞類WildTurkey.java開發
package com.dzt.adapter; public class WildTurkey implements Turkey { @Override public void gobble() { // TODO Auto-generated method stub System.out.println(WildTurkey------------------>gobble); } @Override public void fly() { // TODO Auto-generated method stub System.out.println(WildTurkey------------------>fly); } }
要想把火雞轉成一個鴨子就要建立一個適配器TurkeyAdapter.javaclass
package com.dzt.adapter; /** * 能夠把火雞轉化成鴨子 * * @author Administrator * */ public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; } @Override public void quack() { // TODO Auto-generated method stub turkey.gobble(); } @Override public void fly() { // TODO Auto-generated method stub for (int i = 0; i < 5; i++) turkey.fly(); } }
因爲是要把火雞轉成鴨子,因此須要實現鴨子接口,和鴨子實現類有相同的方法,傳入須要適配的對象(火雞)List
測試代碼方法
package com.dzt.adapter; /** * 使用適配器模式 需求:因爲找不到合適的鴨子,只能暫時到火雞來代替鴨子,但鴨子和火雞的方法不同,此時就須要用一個」中間人「進行轉換。 * * @author Administrator * @data 2014.08.19 */ public class AdapterModel1 { public static void main(String[] args) { WildTurkey wildTurkey = new WildTurkey(); MallardDuck mallardDuck = new MallardDuck(); Duck adapter = new TurkeyAdapter(wildTurkey); System.out.println(turkey say..................); wildTurkey.gobble(); wildTurkey.fly(); System.out.println(duck say..................); mallardDuck.quack(); mallardDuck.fly(); System.out.println(adapter say..................); adapter.quack(); adapter.fly(); System.out.println(-------------------------------------------------); } }
這裏只是舉例一個很簡單的例子,很簡單理解。其實在Android開發中不少地方都用到適配器模式,好比ListView,viewPager等等。結合這些,你就更容易搞懂他了。