設計模式 裝飾模式(三)

2021-08-01 14:35:49 字數 1419 閱讀 4112

裝飾模式

軟體領域中的設計模式的重要性不言而喻。設計模式中運用了物件導向程式設計語言的重要特性:封裝、繼承、多型。雖然知道這些特性的定義但是並沒有做到真正的理解,這樣特性有什麼作用?用於什麼場合中等等問題,帶著疑問開始學習設計模式,主要參考《大話設計模式》和《設計模式:可復用物件導向軟體的基礎》兩本書。

動態地給乙個物件新增一些額外的職責(不重要的功能,只是偶然一次要執行),就增加功能來說,裝飾模式比生成子類更為靈活。建造過程不穩定,按正確的順序串聯起來進行控制。

優點:當你向舊的類中新增新**時,一般是為了新增核心職責或主要行為。而當需要加入的僅僅是一些特定情況下才會執行的特定的功能時(簡單點就是不是核心應用的功能),就會增加類的複雜度。裝飾模式就是把要新增的附加功能分別放在單獨的類中,並讓這個類包含它要裝飾的物件,當需要執行時,客戶端就可以有選擇地、按順序地使用裝飾功能包裝物件。

#include#includeusing namespace std;

//人class person

person(){}

virtual void show() };

//裝飾類

class finery :public person

virtual void show() };

//穿t恤(附加功能類)

class tshirts : public finery

};//穿褲子 (附加功能類)

class bigtrouser : public finery

};//客戶端

int main()

在沒看設計模式之前,設計的**描述結構如下:

class person

person(){}

裝飾一方法{}

裝飾二方法{}

裝飾二方法{}

};

從上面的person類中我們可以看到當系統需要新的功能時,是向舊的類person中新增       新的**,這些新的**通常裝飾了原有類的核心或者主要職責,但是這種方法的問題在於,它們在主類中加入了新的字段,新的方法或者邏輯,從而增加了主類的複雜度,而這些新加入的東西僅僅是為了滿足一些只在特定情況下才會執行的特殊行為的需要。

而裝飾模式提供了乙個非常好的解決方案,他把每個要裝飾的功能放在單獨的類中,並讓這個類包裝他所想要裝飾的物件,因此當需要執行特殊行為時,客戶**就可以在執行時根據本需要有選擇的,按順序的使用裝飾功能包裝物件,上面的裝飾模式列子就是這個情況。

裝飾模式的優點就是:把類中的裝飾功能從類中搬出,這樣可簡化原有的類。上述的例子就是有效的把類的核心職責和裝飾功能區分開了。

對裝飾模式來說,我們要注意它的裝飾順序。

設計模式 三 裝飾模式

動態地給乙個物件新增一些額外的職責 不重要的功能,只是偶然一次要執行 就增加功能來說,裝飾模式比生成子類更為靈活。建造過程不穩定,按正確的順序串聯起來進行控制。good 當你向舊的類中新增新 時,一般是為了新增核心職責或主要行為。而當需要加入的僅僅是一些特定情況下才會執行的特定的功能時 簡單點就是不...

設計模式學習(三) 裝飾模式

在將模式之前,先對乙個oo設計原則掌握 對擴充套件開放和對修改關閉 無論如何,程式不能因為一些功能的修改就去該原來寫的,這樣只會越改越亂,因此,對修改遮蔽,和新增加的功能使用擴充套件的方式新增進去 裝飾者模式正可以做到這一點。這裡碰到的問題就是,軟體應對變化的能力,裝飾者模式提高了軟體的彈性,增加了...

Java設計模式(三) 裝飾模式

裝飾模式 動態的將責任附加到物件上,想要擴充套件功能,裝飾者提供有別於繼承的另一種選擇。1,建立頂級類 package com.pattern.decorate public abstract class beverage public abstract double cost 2,建立產品類 pa...