装饰者模式

来源:互联网 发布:php curl post 数据流 编辑:程序博客网 时间:2024/06/06 21:43
// 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;}