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

装饰模式C++实现

2016-07-27 15:49 363 查看


#include <iostream>
#include <string>
class Person
{
public:
Person() = default;
virtual void showDecorator() {
return;
}
};
class Man : public Person
{
public:
Man() = default;
Man(std::string str) : Name(str){}
void showDecorator() {
std::cout << Name << "装饰: ";
}
private:
std::string Name;
};
class Women : public Person
{
public:
Women() = default;
Women(std::string str) : Name(str){}
void showDecorator() {
std::cout << Name << "装饰: ";
}
protected:
private:
std::string Name;
};
class Decorator : public Person
{
public:
Decorator() = default;
Decorator(Person* p) :persond(p){}
virtual void showDecorator() {
persond->showDecorator();
}
private:
Person* persond;
};
class DecoratorA : public Decorator
{
public:
DecoratorA() = default;
DecoratorA(Person* p) :Decorator(p){}
void showDecorator(){
Decorator::showDecorator();
addDecrator();
}
protected:
private:
void addDecrator() {
std::cout << "头发 ";
}
};
class DecoratorB : public Decorator
{
public:
DecoratorB() = default;
DecoratorB(Person *p) : Decorator(p){}
void showDecorator(){
Decorator::showDecorator();
addDecorator();
}
protected:
private:
void addDecorator(){
std::cout << "服装 ";
}
};
void main() {
Person *ps = new Man("张三");
Person *hair = new DecoratorA(ps);
Person *clothes = new DecoratorB(hair);
clothes->showDecorator();
delete clothes;
delete hair;
delete ps;
return;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: