設計模式學習之適配器模式

UML結構類圖的經常使用畫法git

簡單工廠github

設計模式學習以外觀模式設計模式

Demo傳送門post

生活中相似適配器模式的比較簡單的例子就是電源適配器,或者轉接器,下面簡要描述一個常見的例子:學習

我有一條蘋果充電線,一開始我用的是15款的筆記本電腦,數據線能夠直接和電腦鏈接,我想要經過電腦整理手機中的文件,直接就能夠鏈接電腦。過了一段時間,我換了17新款電腦,發現數據線沒法鏈接到電腦上了,這個時候我就須要一個轉接頭或者轉換器,那麼這個轉換器就至關於適配器,是要將個人電腦插頭和個人數據線插頭給適配起來,使它們可以正常工做。設計

適配器的原理也是相似,下面咱們認識一下適配器的定義:cdn

1.什麼是適配器模式

將一個類的接口轉換成客戶但願的另一個接口,適配器模式使得本來因爲接口不兼容而不能一塊兒工做的那些類能夠一塊兒工做。對象

劃重點:主要是爲了解決接口不兼容而生,也就是說之前已經存在了一部分,如今有另一部分須要融入進去,就須要轉換器(適配器)blog

用一張UML圖能夠很好地說明適配器模式繼承

這個是典型的對象適配器方法,稍後會講解類適配器方法

從圖中能夠分析出,須要被適配的對象Adaptee本來擁有了一個方法existMethod,如今要將Adaptee中已存在的方法適配成Target中的方法,那麼須要在Adapter中進行操做,稍後會給出源碼示例:

  • Client:客戶端,調用本身須要的接口Target
  • Target:定義客戶端須要的特定領域相關的接口
  • Adaptee:已經存在的接口,一般能夠知足用戶的功能要求,可是接口與客戶端要求的不一致,須要被適配
  • Adapter:適配器,將Adaptee適配成爲Client須要的Target

2.對象適配器

UML結構圖如上圖所示,下面具體給出實現

目標接口,也就是客戶端須要的接口

原有接口,即被適配對象

對象適配器

客戶端調用

從這能夠看出來,對象適配器中,適配器須要擁有被適配者

類適配器

嚴格來講,類適配器是要實現如圖所示,須要同時繼承Target,Adaptee,可是OC是沒有多繼承的,因此須要藉助接口和繼承的形式實現,以下圖:

下面我直接展現類適配器的實現方法,Target和Adaptee和對象適配器同樣:

適配器模式的優缺點

優勢

  • 更好的複用性 若是已經有的功能,只是接口不兼容,經過此模式能很好地實現複用

  • 更好的擴展性 適配器中能夠新增新的功能

缺點

  • 過多使用適配器,使得系統很是凌亂,不容易總體把握

適配器的本質是轉換匹配,複用功能,簡而言之就是經過轉換調用已有的實現,把已有的實現匹配成須要的接口

適配器使用的場景:

若是想要使用一個已經存在的類,可是這個存在的類的接口不符合需求

想要建立一個能夠複用的類,這個類可能和一些不兼容的類一塊兒工做,可使用適配器模式,須要什麼就適配什麼

想要使用一些已經存在的子類,可是不可能對每個子類都適配,因此能夠選擇對象適配器,直接適配這些子類的父類

相關文章
相關標籤/搜索