Android 設計模式之適配器模式
來源:程序員人生 發布時間:2014-09-27 05:37:22 閱讀次數:2785次
適配器模式的定義是:將一個類的接口,轉換成客戶期望的另一個接口,適配器讓原本接口不兼容的類可以作無間。看下以下兩張圖就更清楚了


適配器可以實現接口的解耦,如果過一段時間后,廠家想改變接口,適配器可以把改變的部分封裝起來,用戶就不需要跟著接口改變而改變,只要改變適配器就行了。
有這樣一個需求:有一個鴨子類和一個火雞類,我想用火雞對象來冒充鴨子,但火雞和鴨子的方法不完全一樣,這時就需要一個轉換器
Duck.java鴨子接口
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.java
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();
}
}
由于是要把火雞轉成鴨子,所以需要實現鴨子接口,和鴨子實現類有相同的方法,傳入需要適配的對象(火雞)
測試代碼
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("-------------------------------------------------");
}
}
這樣在適配器就能使用鴨子類中的方法,這個模式可以降低客戶與系統之間的耦合,更利于程序的可維護性
相關代碼:http://download.csdn.net/detail/deng0zhaotai/7835473
參考書籍:《Head First 設計模式》
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈