介面卡模式和門面模式是2種使用比較多的結構型設計模式。
介面卡模式的作用是讓原本不相容的介面適配成可以一起使用的介面,比如我們生活中的usb轉接頭。
1.介面卡模式
假如有下面乙個業務,要做一道泡茶的工序,包括洗茶具、洗茶葉、泡茶3步,現在的2段**分別是用a茶具泡普洱茶和用b茶具泡龍井茶
public class maketeapuer
public void washteapuer()
public void washcupa()
}
public class maketealj
public void washtealj()
public void washcupb()
}
如果我們要建立乙個抽象的洗茶任務,然後用介面來呼叫任務,上面的**就不好處理了。現在我們使用介面卡設計模式,引入乙個適配介面,如下:
public inte***ce imaketeaadaptee
我們定義沖泡普洱茶的任務類:
public class pueraprocessor implements imaketeaprocessor
@override
public void process2()
@override
public void process3()
}
我們定義沖泡龍井茶的任務:
public class ljbprocessor implements imaketeaprocessor
@override
public void process2()
@override
public void process3()
}
這樣,我們就把泡茶的程式抽象到了一組適配介面上,方便以後更多的茶葉型別和茶具型別的擴充套件使用,方便泡茶任務通過介面呼叫而非實現呼叫。上面的泡茶程式是基於組合模式來實現的,是物件的介面卡模式。
還有一種類介面卡模式,是基於繼承而非組合方式的實現,**如下:
public class ljbprocessor1 extends maketealj implements imaketeaprocessor
@override
public void process2()
@override
public void process3()
}
基於物件的介面卡模式更適用於介面方法和原有類方法名多數不一致的情況下。如果定義的介面方法和原有類的方法名多數一樣,應該更偏向於使用類介面卡。
在我們的開發中,介面卡模式的使用非常廣泛,主要包括的場景有:封裝有缺陷的介面、統一多個類的介面、替換外部系統的介面、相容新老版本。
在我們的日誌kuan框架sel4j中,定義了抽象介面:org.apache.logging.log4j.logger,裡面定義了debug、info等各種日誌列印的方法,然後針對log4j、logback等日誌類進行了適配,如:log4jloggeradapter
2.門面模式
門面模式提供了一組的介面的封裝,使介面呼叫更加簡單。如下面**,客戶端的乙個操作要呼叫服務端的a、b、c3個服務,三次呼叫增加了通訊成本,我們把介面封裝成乙個d介面,就降低了通訊成本。
public inte***ce inte***cea
public inte***ce inte***ceb
public inte***ce inte***cec
public inte***ce inte***ced
public class serviced implements inte***ced
}
門面模式讓介面變得易用,呼叫成本降低。
3.介面卡模式和門面模式的區別
1)解決的問題:介面卡解決介面不相容問題,而門面模式解決介面易用性問題
2)**結構:介面卡主要是使用組合加繼承的方式,而門面模式其實shi是介面封裝
設計模式 結構型 介面卡模式
什麼是介面卡模式 將乙個介面轉換成客戶希望的另乙個介面,使介面不相容的那些類可以一起工作。介面卡模式既可以作為類結構型模式,也可以作為物件結構型模式。介面卡的分類 介面卡中有類介面卡和物件介面卡,兩者的區別在於介面卡與適配者的關係不同,物件介面卡中兩者之間的關係是關聯關係,類介面卡模式中兩者是繼承關...
設計模式 結構型 介面卡
pragma once ifndef adapter h define adapter h 需要被adapt 的類 class target virtual target virtual void request 0 與被adapt 物件提供不相容介面的類 class adaptee adaptee...
設計模式 介面卡模式 門面模式
介面卡模式定義如下 將乙個類的介面變換成客戶端期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。介面卡模式和裝飾模式有一定的相似性,都起包裝的作用,但二者本質上又是不同的,裝飾模式的結果,是給乙個物件增加了一些額外的職責,而介面卡模式,則是將另乙個物件進行了 偽裝 介面...