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

设计模式之装扮模式(C++实现)

2016-05-17 19:15 489 查看
装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。有时我们希望给某个对象而不是整个类添加一些功能。比如有一个手机,允许你为手机添加特性,比如增加挂件、屏幕贴膜等。一种灵活的设计方式是,将手机嵌入到另一对象中,由这个对象完成特性的添加,我们称这个嵌入的对象为装饰。这个装饰与它所装饰的组件接口一致,因此它对使用该组件的客户透明。

***********************************************main.cpp**************************************************
#include "Person.h"
#include "costume.h"
#include "BigTrouser.h"
#include "Tshirt.h"
#include "Decorate.h"
#include <string>
int main()
{
string name ="DPT";
Person *person = new Decorate(name);
Person *a = new Tshirt(person);
Person *b = new BigTrouser(a);
b->ShowDecorate();//输出DPT的装扮:Tshirt BigTrouser
getchar();
return 0;
}


/***********************************************Person.h**************************************************/
//抽象基类
#include <iostream>
using namespace std;
#pragma once;
class Person
{
public:
Person(){};
virtual void ShowDecorate() = 0;
};


/***********************************************Decorate.h**************************************************/
//真正要装饰的类
#include "Person.h"
#include <string>
class Decorate: public Person
{
public:
string m_name;
public:
Decorate(string name)
{
</span>m_name = name;
}
void ShowDecorate()
{
cout<<m_name<<"的装饰:";
}
};


/***********************************************Costume.h**************************************************/
#include "Person.h"
#pragma once;
class Costume:public Person
{
Person *m_person;
public:
Costume(){}
Costume(Person *person)
{
m_person = person;
}
void ShowDecorate()
{
m_person->ShowDecorate();
}
};


/***********************************************BigTrouser.h**************************************************/
#include "costume.h"

class BigTrouser:public Costume
{
Person * m_person;
public:
BigTrouser(Person * person)
{
m_person = person;
}
void ShowDecorate()
{
m_person->ShowDecorate();
AddDecorate();
}
void AddDecorate()
{
cout<<"BigTrouser ";
}
};


/***********************************************Tshirt.h**************************************************/
#include "costume.h"

class Tshirt:public Costume
{
Person * m_person;
public:
Tshirt(Person *person)
{
m_person = person;
}
void ShowDecorate()
{
m_person->ShowDecorate();
AddDecorate();
}
void AddDecorate()
{
cout<<"T-shirt ";
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: