有時候我們需要在某個類已有的功能中新增新的功能。此時我們可以用繼承的方式來給類新增功能。我們也可以用裝飾模式來實現。
裝飾模式,動態的給乙個物件新增功能。與繼承的方式相比,它更有靈活性。
裝飾模式實現思路是。在原有物件上嵌入想要擴充套件的裝飾器。裝飾器實現裝飾功能。
其中,component定義乙個物件介面,可以動態的給這些物件新增功能。decorator,裝飾抽象類。繼承自component,從外類來擴充套件component。但是對於component來說,是無需知道decoratoe的存在的。
concretecomponent是具體的物件。而concretedecoratora和b是具體的裝飾類。負責新增功能。
首先,需要裝飾的物件及其抽象父類定義如下。
#pragma once
#include class person
;class nameperson:public person
virtual void show()
private:
std::string m_name;
};
nameperson對應concretecomponent。是需要裝飾的物件。
裝飾類實現如下;
#pragma once
#include "person.h"
class decorateperson:public person
virtual void show()
private:
person *m_person;
};class decoratepersona:public decorateperson
~decoratepersona(){};
virtual void show()
private:
person* m_person;
};class decoratepersonb:public decorateperson
virtual void show()
private:
person* m_person;
};
decorateperson對應decorator。是裝飾類的抽象父類。decoratepersona對應concretedecoratora。具體裝飾器。
然後可以在主函式中像下面這樣使用。
#include "decorateperson.h"
int main(int argc, char* argv)
當需要新增加功能的時候我們只需在新增乙個concretedecorator實現功能,然後在主函式中動態新增。 設計模式之裝飾者模式C 實現
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...
c 設計模式之裝飾模式
裝飾模式能夠實現動態的為物件新增功能,是從乙個物件外部來給物件新增功能。通常給物件新增功能,要麼直接修改物件新增相應的功能,要麼派生對應的子類來擴充套件,抑或是使用物件組合的方式。顯然,直接修改對應的類這種方式並不可取。在物件導向的設計中,而我們也應該盡量使用物件組合,而不是物件繼承來擴充套件和復用...
C 設計模式之裝飾模式
動態地給乙個物件增加一些額外的職責,就增加物件的功能來說,裝飾模式比生成子類更為靈活。裝飾模式是一種物件結構模式。我們常常通過繼承的方式來對乙個既有的類進行功能新增,但繼承方式有顯著的侷限性,因為 例如在視窗控制項當中,要增加新的功能如增加滾動條,增加背景,通過繼承的方式來增加新的功能,有下面的解決...