// DecorateModel.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
/*
*装饰者模式:子类 B继承父类A,并在父类提供的接口上调用父类的接口函数。
*重点在于,子类B有一个父类A的对象。这样类B的子类则可以根据具体传进来的子类对象,
*决定调用哪个类的接口。
*/
/*
*题目要求:用装饰者模式给一个人写一个穿衣服的类结构。
*/
//Person类
class Person
{
public:
Person(){}
Person(const string& PName){this->name = PName;}
virtual void AddClothes(){};
private:
string name; //人的姓名
};
//装饰类,用来管理穿衣服的。
class Finery:public Person
{
public:
Finery(){}
inline void Decorate(Person* someone){this->someone = someone;}
virtual void AddClothes()
{
someone->AddClothes();
}
protected:
Person *someone;
};
//穿外套类。
class FineryOverCoat:public Finery
{
public:
FineryOverCoat(){}
virtual void AddClothes()
{
someone->AddClothes();
cout<<"穿外套 ";
}
};
//穿裤子类
class FineryTrousers:public Finery
{
public:
FineryTrousers(){}
virtual void AddClothes()
{
someone->AddClothes();
cout<<"穿裤子 ";
}
};
//穿鞋子
class FineryShoes:public Finery
{
public:
FineryShoes(){}
virtual void AddClothes()
{
someone->AddClothes();
cout<<"穿鞋子 ";
}
};
//客户端代码
int _tmain(int argc, _TCHAR* argv[])
{
Person* xc = new Person("小菜");
cout<<"我开始穿衣服了:"<<endl;
FineryShoes *xz = new FineryShoes(); //鞋子对象
xz->Decorate(xc); //给小菜穿鞋子
FineryOverCoat* wt = new FineryOverCoat(); //外套对象
wt->Decorate(xz); //再穿外套
FineryTrousers kz; //裤子对象
kz.Decorate(wt); //再穿裤子
kz.AddClothes(); //展示
return 0;
}
装饰者模式
最新推荐文章于 2025-08-08 10:07:29 发布