// 2_Decorator_1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class Person
{
private:
string _Name;
public:
Person(){}
Person(string name){ _Name = name; }
public:
virtual void Show()
{
cout << "装扮的: " << (_Name.c_str()) << endl;
}
};
// 服饰类
class Finery : public Person
{
protected:
Person * _Component;
public:
void Decorate(Person* comp)
{
_Component = comp;
}
void Show() override
{
if (_Component != nullptr)
{
_Component->Show();
}
}
};
// 具体服饰类
class TShirts : public Finery
{
public:
void Show() override
{
cout << "大T恤" << endl;
Finery::Show();
}
};
// 垮裤
class TBigTrouser : public Finery
{
public:
void Show() override
{
cout << "垮裤" << endl;
Finery::Show();
}
};
class Sneakers : public Finery
{
public:
void Show()
{
cout << "破球鞋" << endl;
Finery::Show();
}
};
class Suit : public Finery
{
public:
void Show()
{
cout << "西装" << endl;
Finery::Show();
}
};
class Tie : public Finery
{
public:
void Show()
{
cout << "领带" << endl;
Finery::Show();
}
};
class LeatherShoes : public Finery
{
public:
void Show()
{
cout << "皮鞋" << endl;
Finery::Show();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
cout << "\n第一种装扮: " << endl;
Person* xc = new Person("小C");
Sneakers *sC = new Sneakers();
TBigTrouser *tC = new TBigTrouser();
TShirts *tSC = new TShirts();
sC->Decorate(xc);
tC->Decorate(sC);
tSC->Decorate(tC);
tSC->Show();
cout << "\n第二种装扮: " << endl;
LeatherShoes* px = new LeatherShoes();
Tie *pTie = new Tie();
Suit *pSuit = new Suit();
px->Decorate(xc);
pTie->Decorate(px);
pSuit->Decorate(pTie);
pSuit->Show();
return 0;
}
运行结果: