在開發過程中,為了擴充套件乙個類的功能我們通常使用繼承乙個子類來實現。但是當擴充套件的功能過多時,則可能出現子類過多,類圖過於膨脹。所以我們使用裝飾者模式來避免這個問題。裝飾者模式提供了一種給乙個類新增職責的方法,它比使用繼承更加靈活,因為它能將職責加到類的指定例項中,它也允許定製乙個類,而無需在繼承層次結構中建立高層次子類。
裝飾者模式的缺點:
1 decorator和它包含的元件是不一樣的,這樣,檢測物件型別時會失敗。
2 裝飾模式會使乙個系統帶有「大量的小物件」,對於維護**的程式設計師來說,它們看起來都差不多,維護起來很困難。
裝飾者模式圖:
舉例:如何實現廣告推介功能
橋接模式:很容易理解,為了擴充套件類的功能,通過在抽象類中加入乙個擴充套件功能介面。
舉例:如為了讓手機在通話功能基礎上再擁有上網功能,我們簡單的在手機類中加入上網介面模組,在讓智慧型手機類在建立時就實現該介面功能。
適配者模式:相應的分為類介面卡模式和物件介面卡模式。為了擴充套件功能或是替換掉相應的功能,我們加入了乙個新的有特殊功能的適配者類來實現功能擴充套件。
總結:類介面卡模式類似於裝飾者模式,為了實現功能的擴充套件新建了乙個功能擴充套件類,將產品類在初始化時將擴充套件類傳入來替換掉相應的功能函式。
如類介面卡模式為了實現不同功能的request()函式,將adapter類物件的request()函式替換成其父類adaptee的specificrequest()函式。
而裝飾者模式則是在子類中存有基類物件,decorator類初始化時傳入基類物件變數(但實際上可能是另乙個子類物件),然後進行的功能擴充套件。
裝飾者模式與橋接模式的相同點在於他們都存在乙個擴充套件功能物件。不同點在於擴充套件的物件與原基類之間的關係。
裝飾者模式與物件介面卡模式的相同之處在於都在存在乙個擴充套件功能物件。但是裝飾者模式是在基類中新增,而物件介面卡則是在子類中新增。
裝飾者模式 跟 介面卡模式
裝飾者模式,為原物件增加功能時使用,裝飾者模式是針對介面實現的,下面是裝飾者模式的結構圖。針對compoment這個介面進行實現,classa跟decorator都實現compoment這個介面,確保覆寫func 方法,裝飾者本身是不提供功能的,它只是對原有功能的追加,所以裝飾者必須要持有原有的物件...
包裝模式(介面卡模式和裝飾者模式)
先看乙個圖 mybatis中的cache 通過對 cache的實現進行了進一步包裝,就可以實現多種多樣的功能,如lru,fifo等快取淘汰策略 點選 synchronizedcache 可以看到,這個是給 方法加上了 synchronized 不同的包裝類,實現了對應特定業務的功能 優點 能提高類的...
基於介面卡模式下的裝飾者模式
有些類被final修飾的類,想繼承進行方法的擴充,但卻不能被繼承。有些類想使用它的方法,但是卻又不想繼承,這兩種情況就是裝飾者的應用場景 本質就是將該類,成員變數的方式實現呼叫方法,並進行補充 實現 inte ce factory 基礎類實現該介面,返回 商品 的字串 final class bas...