您的位置:首页 > 编程语言 > C语言/C++

c++设计模式之装饰者模式

2012-09-30 19:08 239 查看
#include <IOSTREAM.H>

//公共接口

class Component

{

public:

virtual void Operation() = 0;

};

//需要被装饰的对象

class ConcreteComponent :public Component

{

public:

/*Operation代表每个类所有的操作*/

void Operation()

{

cout<<"未被装饰前的对象"<<endl;

}

};

//装饰抽象基类

class Decorator : public Component

{

protected:

Component*component;

public:

void SetComponent(Component*component)

{

this->component = component;//设置需要装饰的对象

}

void Operation()

{

if(component!=NULL)

component->Operation();//在装饰好的对象中添加装饰前对象的功能

}

};

//装饰A类

class ConcreteDecoratorA : public Decorator

{

public:

//装饰A类特有的装饰方法

void Operation()

{

//首先调用被装饰者原来特有的操作

Decorator::Operation();

cout<<"增加A装饰(操作)"<<endl;

}

};

//装饰B类

class ConcreteDecoratorB : public Decorator

{

public:

//装饰B类特有的装饰方法

void Operation()

{

//首先调用被装饰者原来特有的操作

Decorator::Operation();

cout<<"增加B装饰(操作)"<<endl;

}

//装饰B类独有的方法

void FuncB()

{

cout<<"这是装饰B类独有的方法"<<endl;

}

};

void main(void)

{

//实例化一个需要被装饰的对象

ConcreteComponent *c = new ConcreteComponent();

//A种装饰

ConcreteDecoratorA *A = new ConcreteDecoratorA();

//B种装饰

ConcreteDecoratorB *B = new ConcreteDecoratorB();

//为被装饰者c增加A种装饰

A->SetComponent(c);

A->Operation();//此时c具有了A功能

cout<<endl<<endl;

//为c再增加B种装饰

B->SetComponent(A);

//c经过两种装饰后得到最终的B,这有就意味着现在的Operation()函数同时具备A,B,c三者个Operation的功能

B->Operation();

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: