适用场景举例:
对于一个已经设计好并投入适用的类,由于需求变更导致需要扩展类的接口。为了不违背开闭原则,可以采用继承或组合的方式实现多现有接口的扩充。
装饰者模式的特点是采用组合的方式实现新接口的添加。
class CDecorator:public CShape { public: typedef shared_ptr<CShape>ShapePtr; CDecorator(ShapePtr ptr) { m_pShape=ptr; } ~CDecorator() {} virtual void Draw() { m_pShape } private: protected: ShapePtr m_pShape; };
class CSubDecorator:public CDecorator { public: typedef shared_ptr<CShape>ShapePtr; CSubDecorator(ShapePtr ptr):CDecorator(ptr){}; ~CSubDecorator(){}; void Draw() { AddBehivor(); CDecorator::Draw(); } private: void AddBehivor() { cout<<"Add net behavitor"<<endl; }; };
//客户端
int main()
{
shared_ptr<CShape>pShape(new CCircle); shared_ptr<CDecorator>pDecorator(new CSubDecorator(pShape)); pDecorator->Draw();
}