實現步驟:
先定義乙個公用的介面
被裝飾者去實現介面中所有的方法
裝飾者將被裝飾者作為引數傳遞到本類構造以及定義到成員變數中,這一步是為了
後面能夠在實現方法中能夠達到呼叫被裝飾者原有**方法。
裝飾者也實現該公用介面,然後重寫了和被裝飾者一樣的方法,因為裝飾的核心是在不
改變原有的類的構造以及方法的情況下對原有的功能進行補充,所以裝飾者重寫方法時,
在重寫方法裡面呼叫被裝飾者原有的方法,對要增強的方法進行功能補充,然後呼叫裝
飾者物件達到我們所要完成的功能。
缺點說明:為了達到對方法進行增強,我們這裡通過介面來將兩者給聯絡在一起,
裝飾者和被裝飾者都被迫重寫了介面中的所有方法,造成了大量的**的冗餘,每當我們要
要獲取乙個新的功能不同的裝飾者和被裝飾者,又得重寫介面中所有的**了
核心思想:上文中提到的裝飾者設計模式,因為裝飾與被裝飾者之間是通過介面達到
實現方法增強的,所以因為是介面的原因,所以重寫了大量的方法。針對這個問題,為何我
們不換一種思維去儘量減少**的冗餘,能不能只重寫一次介面,從而達到對方法的增強
這裡的介面卡設計模式的核心思維在,繼承,繼承不需要重寫所有的方法,可以選擇性的重寫
我們可以在裝飾者與介面之間定義乙個中間的父類,去完成我們對方法重寫的選擇,讓這個父類
去代替我們實現介面中所有的方法,我們只要繼承他去完成我們所要達到的方法增強的目的就行。
這樣以後我們需要對不同方法編寫不同的裝飾者的時候就無需重寫介面所有方法了,在一定程度
上減少了**的冗餘。
實現步驟
(1)定義乙個介面
(2)定義乙個抽象父類,去重寫介面中的方法
(3)定義乙個目標類,去重寫介面中的方法
(4)定義乙個裝飾者,去繼承父類,定義目標類的成員變數,滿參構造,重寫我們要增強的方法
(5)使用的時候要呼叫被裝飾者的普通方法,直接通過new物件使用,要使用增強方法
則通過建立裝飾者物件,傳遞被裝飾者的物件引數,然後呼叫即可
設計模式 介面卡模式(類介面卡和物件介面卡)
如果去歐洲國家去旅遊的話,他們的插座如下圖最左邊,是歐洲標準。而我們使用的插頭如下圖最右邊的。因此我們的膝上型電腦,手機在當地不能直接充電。所以就需要乙個插座轉換器,轉換器第1面插入當地的插座,第2麵供我們充電,這樣使得我們的插頭在當地能使用。生活中這樣的例子很多,手機充電器 將220v轉換為5v的...
設計模式 介面卡
一 功能 將乙個類的介面轉換成客戶希望的另外乙個介面,解決兩個已有介面之間不匹配的問題。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。二 示例 1 class adapter namespace designpattern adapter class target cl...
設計模式 介面卡
將乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。已存在的 具有特殊功能 但不符合我們既有的標準介面的類 public class adaptee 目標介面,或稱為標準介面 public inte ce target 介面卡類,繼承了被適配類...