設計模式 --- 介面卡模式
阿新 • • 發佈:2018-11-22
1.定義
介面卡模式把一個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。
2.使用場景
1.系統需要使用現有的類,而此類的介面不符合系統的要求,即介面不相容。
2.想要建立一個可以重複使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。
3.需要一個統一的輸出介面,而輸入端的型別不可預知。
3.簡單實現
用電源介面為例,膝上型電腦一般都是5V電壓,但是生活中電壓為220V,這時候就需要一個介面卡來介面轉換。
類介面卡模式
//目標角色 interface FiveVolt{ int getVolt5(); } //需要被轉化的物件 class Volt220 { int getVolt220(){ return 220; } } //Adapter角色,將220V轉換為5V class AdapterVolt extends Volt220 implements FiveVolt{ @Override public int getVolt5() { return 5; } } public class AdapterMode { public static void main(String[] args){ AdapterVolt adapterVolt = new AdapterVolt(); System.out.println("電壓:" + adapterVolt.getVolt5()); } }
物件介面卡模式
//目標角色 interface FiveVolt{ int getVolt5(); } //需要被轉化的物件 class Volt220 { int getVolt220(){ return 220; } } //Adapter角色,將220V轉換為5V class AdapterVolt implements FiveVolt{ Volt220 volt220; public AdapterVolt(Volt220 volt220) { this.volt220 = volt220; } public Volt220 getVolt220() { return volt220; } @Override public int getVolt5() { return 5; } } public class AdapterMode { public static void main(String[] args){ AdapterVolt adapterVolt = new AdapterVolt(new Volt220()); System.out.println("電壓:" + adapterVolt.getVolt5()); } }
物件介面卡模式直接將要被適配的物件傳遞到Adapter中,使用組合的形式實現介面相容的效果。這比類介面卡要更靈活,它的另一個好處是被適配對像中的方法不會暴露出來,而類介面卡由於繼承了被適配物件,因此在Adapter中也有被適配類物件的方法,會出現一些奇怪的介面,增加使用成本,因此物件適配模式更加靈活實用。
4.小結
優點:
更好的複用性、更好的拓展性
缺點:
過多使用介面卡會讓系統凌亂,不易把握整體。