#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
/*************************************
装饰模式
*************************************/
class Person {
public:
Person(){}
Person(string strName) :name_(strName) {}
virtual void Show() {
cout << " 装饰的 "<< name_ << endl;
}
private:
Person(const Person& p);
string name_;
};
/*
抽象 装饰
*/
class Finery :public Person{
public:
Finery():p_(NULL){}
void Decorate(Person* p){
p_ = p;
}
void Show() {
if (p_) {
p_->Show();
}
}
protected:
Person* p_;
};
/*
具体装饰
*/
class TShirts :public Finery {
public:
void Show() {
cout << "T恤衫" << " ";
Finery::Show();
}
};
/*
具体装饰
*/
class BigTrousers :public Finery {
public:
void Show() {
cout << "大垮裤" << " ";
Finery::Show();
}
};
class LeatherShoes : public Finery{
public:
void Show()
{
std::cout << "皮鞋" << " ";
Finery::Show();
}
};
int main()
{
Person* p = new Person("行人");
TShirts* pts = new TShirts();
BigTrousers* pbt = new BigTrousers();
LeatherShoes* pls = new LeatherShoes();
pts->Decorate(p);
pbt->Decorate(pts);
pls->Decorate(pbt);
pls->Show();
return 0;
}
为一个类添加额外的功能装饰
参考 大话设计模式