设计模式之装扮模式(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 "; } };
相关文章推荐
- Java和C++的虚函数的异同
- 分数加减的简单运算
- 杭电 2054(指针 strchr函数)
- C语言实现电话本 动态开辟 信息存储于文件
- C语言中经常遇到的陷阱!好东西
- C++开学第二次作业(5.14)
- stm8中断使用
- MZ test17# NOIP模拟题 #T3 第3 题 登山机器人(robot.pas/cpp)
- C++ 接口的实现方式
- C++中如何可以修改const函数内的成员变量的值?
- 1007. 素数对猜想 (20)
- C++拷贝构造函数详解
- C++类内存实验(一)
- C++——成员函数
- c++ 之replace函数用法
- C语言高级知识点滴
- POJ 3254 Corn Fields(状态压缩DP)
- C语言编写金字塔
- c++ inline 函数
- c语言文件操作总结