說到適配器,我們可能會想到電腦的適配器,沒錯,其實作用是一樣的,電腦的適配器在中國可以使用,在美國也可以使用,它的主要作用是在新接口和老接口之間進行適配。。這就是一個適配的過程,適配器模式的類圖如下:
這個類圖是我在其他的地方截到的,我以前覺的類圖特別不好看,慢慢接觸之后發現類圖和流程圖都特別有意義,一看就特別的清晰。整個流程就是通過Adapter把Adaptee轉換為目標(Target)的子類。既然已經知道原理了,那下面開始碼代碼吧。我來舉例一個場景吧,經常需要使用到投影儀,但是有一些人的電腦並不支持投影儀的大口,只能使用適配器了。那就是可以把小口轉換為大口。
package com.roc.adapter; /** * 投影儀支持的大口 * @author liaowp * */ public interface BigPort { public void userBigPort();//使用的大口 }
package com.roc.adapter; /** * 電腦的小口 * @author liaowp * */ public interface SmallPort { public void userSmallPort();//使用小口 }
package com.roc.adapter; /** * 適配器模式 * @author liaowp * */ public class SmallToBig implements BigPort{ private SmallPort smallPort;//小口 public SmallToBig(SmallPort smallPort){//獲得小口 this.smallPort=smallPort; } public void userBigPort() { this.smallPort.userSmallPort(); //使用小口 } }
package com.roc.adapter; /** * 客戶端 * @author liaowp * */ public class Client { public static void main(String[] args) { SmallPort smallPort = new SmallPort() {//電腦自帶小口 public void userSmallPort() { System.out.println("使用的是電腦小口"); } }; //需要一個大口才可以投影,小口轉換為大口 BigPort bigPort=new SmallToBig(smallPort); bigPort.userBigPort();//電腦小口工作中 實現了適配 } }
下面說一下適配器的優缺點:
優點:
1、將目標類和適配者類解耦
2、增加了類的透明性和復用性,將具體的實現封裝在適配者類中,對於客戶端類來說是透明的,而且提高了適配者的復用性
3、靈活性和擴展性都非常好,符合開閉原則
類適配器還有的優點:
1、由於適配器類是適配者類的子類,因此可以再適配器類中置換一些適配者的方法,使得適配器的靈活性更強。
類適配器的缺點:
1、對於Java、C#等不支持多重繼承的語言,一次最多只能適配一個適配者類,而且目標抽象類只能為接口,不能為類,其使用有一定的局限性,不能將一個適配者類和他的子類同時適配到目標接口。
對象適配器還有的優點:
1、把多個不同的適配者適配到同一個目標,也就是說,同一個適配器可以把適配者類和他的子類都適配到目標接口。
對象適配器的缺點:
1、與類適配器模式相比,要想置換適配者類的方法就不容易。
適配器模式與代理模式的區別:
適配器模式
是把2個不同的東西轉換到可以正常使用,適配器是去迎合目標對象與源對象。
代理模式
是2個對象都有相同的功能,2者接口是一樣的。