Java結構型模式(1)——適配器模式



《2020年阿里雲活動拼團》:https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=czfmwdn3

【限時】1年86元,3年229元,用來建站和編程學習【附WordPress建站教程




適配器模式屬於結構型模式的一種,它可以理解爲現實生活中的電源適配器、網絡適配器等。首先要搞清楚什麼是結構型模式。



結構型模式是將系統中的多個類或對象組合在一起,相互協作來完成更復雜的任務或功能。就好比搭積木,許多簡單積木可以搭建成更復雜、功能更強大的結構。它分爲兩種形式:類結構型模式和對象結構型模式。類結構型模式由多個類組合,存在繼承和實現關係;對象結構型模式由類和對象組合,存在關聯關係(比如車和輪胎的關係)。



下面我們再介紹適配器模式:



1、定義:將一個類的接口轉化成多個類可以兼容的接口,使其協同工作而無需修改現有類的內部結構。



2、模式結構:



(1)Target(目標抽象類):定義了特定的工作接口。



(2)Adapter(適配器類):模式的核心類,作爲轉換器對Target和Adaptee進行適配。



(3)Adaptee(適配者類):定義了需要適配的接口。



(4)Client(客戶類):針對目標抽象類編程,調用其定義的方法。



3、類適配器和對象適配器的比較:



類適配器中,適配器類通過實現Target接口並繼承Adaptee類,實現適配目的。



public class Adapter extends Adaptee implements Target


{


//request()方法爲Target接口裏所定義的方法

public void request()


{


specificRequest();//該方法爲Adaptee類裏定義的方法


}


}


對象適配器中,適配器類通過繼承Target類並關聯一個Adaptee對象,實現適配目的。



public class Adapter extends Target


{


private Adaptee adaptee;//所關聯的適配者類的對象


public Adapter(Adaptee adaptee)


{


this.adaptee=adaptee;


}


public void request()


{


adaptee.specificRequest();


}


}


4、案例分析:(機器人)使用的是類適配器模式



(1)目標抽象類 Robot



public interface Robot


{


public void cry();


public void move();


}


(2)適配者類 Dog



public class Dog


{


public void shout()


{


System.out.println("狗可以汪汪叫!");


}


public void run()


{


System.out.println("狗可以跑!");


}


}


(3)適配器類 DogAdapte



public class DogAdapter extends Dog implements Robot


{


public void cry(){


System.out.print("機器人模仿:");


super.shout();


}


public void move(){


System.out.print("機器人模仿:");


super.run();


}


}


5、模式優缺點:



(1)優點:將目標類和適配者類解耦,更換添加適配器方便簡單,增加了類的複用性。



(2)缺點:類適配器模式一次只能適配一個適配者類,目標抽象類只能爲接口,具有一定的侷限性;對象適配器模式很難置換適配者類的方法。



6、模式應用:



(1)通過 JDBC 連接數據庫時加載數據庫驅動利用了適配器模式。不同數據庫的驅動都是介於 JDBC 接口和數據庫引擎接口(如Oracle)之間的適配器軟件。



(2)框架 Spring 的組成之一 Spring AOP 中,BeforeAdvice、AfterAdvice、ThrowsAdvice 三種通知類型是藉助適配器模式實現的,AdvisorAdapter 是一個適配器接口,源碼如下:



public interface AdvisorAdapte


{


//將一個 Advisor 適配成 MethodIntercepto


MethodInterceptor getInterceptor(Advisor advisor);


//判斷此適配器是否支持特定的 Advice


boolean supportsAdvice(Advice advice);


}


(3)JDK類庫中n的一些適配器類,如 InputStreamAdapter 類用於包裝 ImageInputStream 接口及其子類對象,使用對象適配器模式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章