適配器模式


參考資料:

https://www.imooc.com/learn/146

https://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/adapter.html#id11

適配器模式案列代碼



1、什麼是適配器模式?

適配器模式將一個類的接口,轉換成客戶期望的另外一個接口。使得原本由於接口不兼容而不能一起工作的那些類可以在一起工作;

2、適配器模式結構?

適配器模式包含如下角色:

Target:目標抽象類

Adapter:適配器類

Adaptee:適配者類

Client:客戶類

3、如何實現適配器模式?

適配器模式有對象適配器和類適配器兩種實現;

way1 使用組合的方式實現適配器模式;

way2 使用繼承的方式實現;

(1)組合:採用組合方式的適配器稱爲對象適配器;

特點:把“被適配者”作爲一個對象組合到適配器類中,以修改目標接口包裝被適配者;

對象適配器:


在這裏插入圖片描述

(2)繼承:採用繼承方式的稱爲類適配器

類適配器:


在這裏插入圖片描述

注:Java是單繼承

4、適配器模式的特點?

特點:

通過多重繼承不兼容接口,實現對目標接口的匹配,單一的爲某個類而實現適配;

適配器有很多的變體——》把不兼容的轉化成兼容的、匹配的都叫做適配器;

(1)適配器對象實現原有接口

(2)適配器對象組合一個實現新接口的對象(這個對象也可以不實現一個接口,只是一個單純的對象)

(3)對適配器原有接口方法的調用被委託給新接口的實例的特定方法

5、適配器模式在項目中的應用(場景)?

在以下情況下可以使用適配器模式:

系統需要使用現有的類,而這些類的接口不符合系統的需要。

想要建立一個可以重複使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。

6、適配器模式的優點?

  • 將目標類和適配者類解耦,通過引入一個適配器類來重用現有的適配者類,而無須修改原有代碼。
  • 增加了類的透明性和複用性,將具體的實現封裝在適配者類中,對於客戶端類來說是透明的,而且提高了適配者的複用性。
  • 靈活性和擴展性都非常好,通過使用配置文件,可以很方便地更換適配器,也可以在不修改原有代碼的基礎上增加新的適配器類,完全符合“開閉原則”。



    類適配器模式還具有如下優點:

    由於適配器類是適配者類的子類,因此可以在適配器類中置換一些適配者的方法,使得適配器的靈活性更強。


    對象適配器模式還具有如下優點:

    一個對象適配器可以把多個不同的適配者適配到同一個目標,也就是說,同一個適配器可以把適配者類和它的子類都適配到目標接口。

7、適配器模式的缺點?

類適配器模式的缺點如下:

對於Java、C#等不支持多重繼承的語言,一次最多隻能適配一個適配者類,而且目標抽象類只能爲抽象類,不能爲具體類,其使用有一定的侷限性,不能將一個適配者類和它的子類都適配到目標接口。

對象適配器模式的缺點如下:

與類適配器模式相比,要想置換適配者類的方法就不容易。如果一定要置換掉適配者類的一個或多個方法,就只好先做一個適配者類的子類,將適配者類的方法置換掉,然後再把適配者類的子類當做真正的適配者進行適配,實現過程較爲複雜。

8、適配器模式的作用

適配器就是爲了解決目標接口與原本接口不兼容問題而引入的;


(1)透明

通過適配器,客戶端可以調用同一接口,因而對客戶端來說是透明的。這樣做更簡單、更直接、更緊湊;


(2)重用

複用了現存的類,解決了現存類和複用環境要求不一致的問題;


(3)低耦合

將目標類和適配者類解耦,通過引入一個適配器類重用現有的適配者類,而無需修改原有代碼(遵循開閉原則)

9、適配器模式拓展

Default配器模式(Default Adapter Pattern) 或 缺省適配器模式


當不需要全部實現接口提供的方法時,可先設計一個抽象類實現接口,併爲該接口中每個方法提供一個默認實現(空方法),那麼該抽象類的子類可有選擇地覆蓋父類的某些方法來實現需求,它適用於一個接口不想使用其所有的方法的情況。因此也稱爲單接口適配器模式。

總結

有人認爲講解設計模式的例子都太簡單,看着感覺是那麼回事,但是要是真想在項目開發中使用,還真是應用不到。其實我們不必在項目中刻意使用設計模式,而是應該從實際的設計問題出發,看哪個模式能解決我們的問題,就使用哪個模式。不要爲了使用模式而使用模式,那樣就捨本逐末了,一般情況下,只要遵循一定的設計原則就可以了,設計模式也是根據這些原則被總結出來的,熟悉了這些原則,模式自然而然就有了。

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