設計模式(8)—— 結構型 ——介面卡(Adapter)
阿新 • • 發佈:2018-11-19
- 定義:將一個類的介面轉換成客戶期望的另一個介面,使原本介面不相容的類可以一起工作
- 型別:結構型
- 適用場景:
- 已經存在的類,它的方法和需求不匹配時(方法結果系統或者相似)
- 不是軟體設計階段考慮的設計模式,是隨著軟體維護,由於不同產品,不同廠家造成功能類似而介面不相同情況下的解決方案。
- 優點:
- 提高類的透明性和複用,現有的類複用但不需要改變
- 目標類和介面卡解耦,提高程式的擴充套件性
- 符合開閉原則
- 缺點
- 介面卡編寫過程需要全面考慮,可能會增加系統的複雜性
- 增加系統程式碼可讀的難度
- 擴充套件
- 物件介面卡
- 類介面卡
- 相關的設計模式
- 介面卡和外觀模式
程式碼實現
另外,引入生活中的例子。下面也是借鑑他人(@geely)程式碼,例子非常好:
/**
* Created by geely
* 民用電源220V
*/
public class AC220 {
public int outputAC220V(){
int output = 220;
System. out.println("輸出交流電"+output+"V");
return output;
}
}
/**
* Created by geely
* 充電器,電源介面卡。
*/
public class PowerAdapter implements DC5{
private AC220 ac220 = new AC220();
@Override
public int outputDC5V() {
int adapterInput = ac220.outputAC220V();
//變壓器...
int adapterOutput = adapterInput/44;
System.out.println("使用PowerAdapter輸入AC:"+adapterInput+"V"+"輸出DC:"+adapterOutput+"V");
return adapterOutput;
}
}
介面卡介面
/**
* Created by geely
*/
public interface DC5 {
int outputDC5V();
}
測試程式碼類Test
/**
* Created by geely
*/
public class Test {
public static void main(String[] args) {
Target target = new ConcreteTarget();
target.request();
Target adapterTarget = new Adapter();
adapterTarget.request();
}
}