#include <iostream>
using namespace std;
class Component
{
public:
virtual void Operation() = 0;
};
class ConCreateComponent: public Component
{
public:
void Operation()override
{
cout << "具体对象的操作" << endl;
}
};
class Decorator : public Component
{
public:
public:
void SetComponent(Component* component) //设置Component
{
m_componnet = component;
}
void Operation()override //重写Operation方法,实际执行的是m_componnet的Operation
{
if (m_componnet != NULL)
{
m_componnet->Operation();
}
}
protected:
Component* m_componnet;
};
class ConCreateDecoratorA : public Decorator
{
public:
void Operation()override
{
__super::Operation(); //执行父类中的操作
//下面执行本类中自身的一些行为
cout << "ConCreateDecoratorA的自身的行为" << endl;
m_strName = string("ConCreateDecorator"); //首先执行的是父类中的Operation方法之后,然后执行本类中自己的行为
}
private:
//本类的独有功能
string m_strName;
};
class ConCreateDecoratorB : public Decorator
{
public:
void Operation()override
{
__super::Operation();
//执行本类自身的行为
cout << "ConCreateDecoratorB的自身的行为" << endl;
}
};
int main()
{
ConCreateComponent* c = new ConCreateComponent();
ConCreateDecoratorA* A = new ConCreateDecoratorA();
ConCreateDecoratorB* B = new ConCreateDecoratorB();
A->SetComponent(c);
B->SetComponent(A);
B->Operation();
system("pause");
return 0;
}