5 结构型模式之 - 适配器模式
適配器模式的介紹:適配器模式在開發(fā)中使用率很高,適配器是將兩個不兼容的類融合在一起,它有點像粘合劑,將不同的東西通過一種轉(zhuǎn)換使得它們能夠協(xié)作起來。例如經(jīng)常碰到兩個不相關(guān)的類之間進(jìn)行交互,第一個解決方案是修改各自類的接口,但是如果沒有源碼或者我們不愿意為了一個應(yīng)用而修改各自的接口,此時怎么辦?這種情況我們往往會使用一個Adapter,在這兩種接口之間創(chuàng)建一個“混血兒”接口,這個Adapter會將這兩個接口兼容,在不修改源碼的情況下滿足需求。
適配器模式的定義:適配器模式把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能在一起工作
適配器使用場景:
1 系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要,即接口不兼容
2 想要建立一個可以重復(fù)使用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類,包括一些可能在將來引進(jìn)的類一起工作
3 需要一個統(tǒng)一的輸出接口,而輸入端的類型不可預(yù)知
?
用電源接口做例子,筆記本電腦的電源一般都是5V電壓,但是我們生活中的電線電壓一般都是220V,這個時候就出現(xiàn)了不匹配的情況,不軟件開發(fā)中我們稱之為接口不兼容,此時就需要適配器來進(jìn)行一個接口轉(zhuǎn)換,在軟件開發(fā)中有一句話正好體現(xiàn)了這點:任何問題都可以加一個中間層來解決。這個層我們可以理解為這里的Adapter層,通過這層來進(jìn)行一個接口轉(zhuǎn)換就達(dá)到了兼容的目的。
適配器模式分分兩種:
1)類適配器模式
2) 對象適配器模式
先說第一種類適配器模式:
?
5V電壓的接口,代碼如下:
1 /** 2 * Target角色,就是要轉(zhuǎn)換成的5V的 3 */ 4 public interface FiveVolt { 5 int getVolt5(); 6 }?
220V的電壓,需要被轉(zhuǎn)換的
1 /** 2 * 220V的電壓,被轉(zhuǎn)換的類 3 */ 4 public class Volt220 { 5 public int getVolt220(){ 6 return 220; 7 } 8 }?
下面是Adapter角色,將220V的電壓轉(zhuǎn)換成5V的電壓
1 /** 2 * 適配器,即有5V的,又有220V的,就像轉(zhuǎn)換頭一樣,兩邊都可以兼容 3 */ 4 public class ClassVoltAdapter extends Volt220 implements FiveVolt { 5 @Override 6 public int getVolt5() { 7 return 5; 8 } 9 }看到?jīng)],上面的ClassVoltAdapter里面即有220V的,又有5V的,需要5V的也可以用,需要220V的也可以用。
下面是類適配器模式的測試類:
1 /** 2 * 下面是類適配器模式的測試類 3 */ 4 public class ClassAdapterTest { 5 public static void main(String[] args){ 6 test(); 7 } 8 9 public static void test(){ 10 11 ClassVoltAdapter voltAdapter = new ClassVoltAdapter(); 12 System.out.println(voltAdapter.getVolt5()); 13 14 } 15 16 }?
?
下面再來看看第二種適配器模式:對象適配器模式
首先前面的 5V的接口和220V的類還是一樣的。這里只是把代碼貼出來供方便查看的。
5V電壓的接口,代碼如下:
1 /** 2 * Target角色,就是要轉(zhuǎn)換成的5V的 3 */ 4 public interface FiveVolt { 5 int getVolt5(); 6 }?
220V的電壓類
/*** 220V的電壓,被轉(zhuǎn)換的類*/ public class Volt220 {public int getVolt220(){return 220;} }?
下面看一下對象適配器類:主要是實現(xiàn)了目標(biāo)接口,并且保存了一個被轉(zhuǎn)換的類的對象的引用 ,代碼如下:
1 /** 2 * 對象適配器,實現(xiàn)目標(biāo)接口,保存一個被轉(zhuǎn)換對象的引用 3 */ 4 public class ObjectVoltAdapter implements FiveVolt{ 5 //保存一個被轉(zhuǎn)換對象的引用 6 Volt220 volt220; 7 8 public ObjectVoltAdapter(Volt220 volt220){ 9 this.volt220 = volt220; 10 } 11 12 @Override 13 public int getVolt5() { 14 return 5; 15 } 16 17 public int getVolt220(){ 18 return volt220.getVolt220(); 19 } 20 }?
下面是對象適配器模式測試類:
1 /** 2 * 對象適配器的測試類 3 */ 4 public class ObjectVoltAdapterTest { 5 public static void main(String[] args){ 6 test(); 7 } 8 9 public static void test(){ 10 //創(chuàng)建一個220V的電壓類的對象,也就是被轉(zhuǎn)換的類的對象 11 Volt220 volt220 = new Volt220(); 12 //創(chuàng)建一個對象適配器類的對象,并且保存一個被轉(zhuǎn)換的類的對象 13 ObjectVoltAdapter voltAdapter = new ObjectVoltAdapter(volt220); 14 System.out.println(voltAdapter.getVolt5()); 15 } 16 }?
posted on 2017-04-26 20:25?九路313 閱讀(...) 評論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/start1225/p/6770532.html
總結(jié)
以上是生活随笔為你收集整理的5 结构型模式之 - 适配器模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AIX查看HBA卡的WWN号
- 下一篇: 使用SQLite数据库存储数据(4)删除