#include <iostream>
#include <string>
using namespace std;
class Component
{
public:
virtual ~Component(){}
virtual void Operation(){}
protected:
Component(){};
};
class ConcreteComponent : public Component
{
public:
ConcreteComponent(){}
~ConcreteComponent(){}
void Operation()
{
cout<<"ConcreteComponent::Operation()"<<endl;
}
};
class Decorator : public Component
{
public:
Decorator(Component *compoent)
: m_pComponent(compoent)
{
}
~Decorator(){delete m_pComponent;}
void Operation()
{
}
protected:
Component *m_pComponent; // 被装饰对象的指针
};
class ConcreteDecorator : public Decorator
{
public:
ConcreteDecorator(Component *com)
: Decorator(com)
{
}
~ConcreteDecorator(){}
void Operation()
{
m_pComponent->Operation(); // 调用被装饰对象的方法
AddedBehavior(); // 调用添加的动作
}
void AddedBehavior()
{
cout<<"ConcreteDecorator::AddedBehavior()"<<endl;
}
};
class ConcreteDecoratorB : public Decorator
{
public:
ConcreteDecoratorB(Component *com)
: Decorator(com)
{
}
~ConcreteDecoratorB(){}
void Operation()
{
m_pComponent->Operation(); // 调用被装饰对象的方法
AddedBehavior(); // 调用添加的动作
}
void AddedBehavior()
{
cout<<"ConcreteDecoratorB::AddedBehavior()"<<endl;
}
};
int main()
{
//ConcreteDecorator给 ConcreteComponent类添加了动作 AddedBehavior。
Component *com = new ConcreteComponent();
Decorator *dec = new ConcreteDecorator(com);
Decorator *decB = new ConcreteDecoratorB(dec);
decB->Operation();
delete decB;
return 0;
}
///
#include <iostream>
#include <string>
using namespace std;
class Component
{
public:
virtual void show() = 0;
virtual ~Component(){cout<<"~Component"<<endl;}
};
class Person : public Component
{
public:
Person(){}
~Person(){cout <<"~Person"<< endl;}
Person(string name)
{
this->name = name;
}
virtual void show()
{
cout<<"装扮的{0}"<<name<<endl;
}
private:
string name;
};
class Decorator: public Component
{
public:
Decorator(Component *com):component(com){}
~Decorator()
{
if (component != NULL)
delete component;
cout<<"~Decorator"<<endl;
}
void show()
{
}
protected:
Component *component;
};
class Finery : public Decorator
{
public:
Finery(Component *com):Decorator(com){}
~Finery()
{
cout<<"~Finery"<<endl;
}
void show()
{
component->show();
cout<<"Finery";
}
};
class TShirts : public Decorator
{
public:
TShirts(Component *com):Decorator(com){}
~TShirts()
{
cout<<"~TShirts"<<endl;
}
void show()
{
component->show();
cout<<"大T恤 \n";
}
};
int main()
{
Person * person = new Person("xiao hong");
Decorator *finery = new Finery(person);
Decorator *tshirt = new TShirts(finery);
tshirt->show();
delete tshirt;
return 0;
}
decorator 装饰模式
最新推荐文章于 2022-05-24 16:29:12 发布