Decorator模式解决以下情况:我们需要为一个已经定义好的类添加新的职责(操作),通常的情况我们会定义一个新类继承自定义好的类,这样会带来一个问题。通过继承的方式解决这样的情况还带来了系统的复杂性,因为继承的深度会变得很深。而Decorator模式提供了一种给类增加职责的方法,不是通过继承实现,而是通过组合。
Decorator.h
//Decorator.h #ifndef _DECORATOR_H_ #define _DECORATOR_H_ class Component { public: virtual ~Component(); virtual void Operation(); protected: Component(); private: }; class ConcreteComponent:public Component { public: ConcreteComponent(); ~ConcreteComponent(); void Operation(); protected: private: }; class Decorator:public Component { public: Decorator(Component* com); virtual ~Decorator(); void Operation(); protected: Component* _com; private: }; class ConcreteDecorator:public Decorator { public: ConcreteDecorator(Component* com); ~ConcreteDecorator(); void Operation(); void AddedBehavior(); protected: private: }; #endif //~_DECORATOR_H_Decorator.cpp
//Decorator.cpp #include "Decorator.h" #include <iostream> Component::Component() { } Component::~Component() { } void Component::Operation() { } ConcreteComponent::ConcreteComponent() { } ConcreteComponent::~ConcreteComponent() { } void ConcreteComponent::Operation() { std::cout<<"ConcreteComponent operation..."<<std::endl; } Decorator::Decorator(Component* com) { this->_com = com; } Decorator::~Decorator() { delete _com; } void Decorator::Operation() { } ConcreteDecorator::ConcreteDecorator(Component* com):Decorator(com) { } ConcreteDecorator::~ConcreteDecorator() { } void ConcreteDecorator::AddedBehavior() { std::cout<<"ConcreteDecorator::AddedBehacior...."<<std::endl; } void ConcreteDecorator::Operation() { _com->Operation(); this->AddedBehavior(); }
#include "Decorator.h" #include <iostream> using namespace std; int main(){ Component* com = new ConcreteComponent(); Decorator* dec = new ConcreteDecorator(com); dec->Operation(); delete dec; return 0; }
原文:http://blog.csdn.net/starcuan/article/details/20369401