装饰者模式(C++)
来源:互联网 发布:java 多泛型参数 编辑:程序博客网 时间:2024/05/17 23:09
解决的问题:当我们需要对一个对象添加新的功能。我们可以采用子类继承的方式来解决。
但是装饰者模式可以采用组合的方式,更加的灵活。比如我有一个人的抽象基类,从这个基类派生出了
中国人、美国人、新加坡人等具体类,他们有相同的方法:穿衣服()。我们想对这个穿衣服进行修饰,>比如穿什么衣服。我们再从人基类中派生出一个装饰类,表示这个装饰类专门用来装饰“人”的。
然后再具体的生成装饰,如从这个装饰类中派生出:牛仔裤()、T-shirt()、裙子()。这几个装饰可以任意组>合。
子类继承来扩展功能:每个子类都要单独写这个功能,代码不够灵活。
当在分析程序功能时,在需要经常要修改功能的地方可以利用这个方法。各功能部分作用
在装饰模式中的各个角色有:
抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。
装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的>接口。
具体装饰(Concrete Decorator)角色:负责给构件对象”贴上”附加的责任。
#include "stdafx.h"#include<iostream>#include<string>using namespace std;class human{public: virtual void goHome()=0;};//被装饰的子类class woman:public human{public: void goHome() { cout<<"woman go home"; }};class man:public human{private: string name;public: man(string name) { this->name=name; } string GetName() { return this->name; } void goHome() { cout<<"man go home"; }};//装饰类class Deractor:public human{protected://子类继承后能继续访问,其他则不行 human *a;public: Deractor(human* person):a(person){};//本类中定义了一个基类的对象,用装饰类的构造函数完成初始。 void goHome() { a->goHome(); }};//特定的装饰类,主要操作是指针class DeractorA_Car:public Deractor{private: string tools;public: DeractorA_Car(human* person):Deractor(person){}; void SetCar(const string& str) { this->tools=str; } string GetCar() { return this->tools; } void goHome()//装饰后新的goHome() { a->goHome();//调用父类的goHome功能 SetCar("+Car");//添加功能 cout<<GetCar(); }};class DeractorB_train:public Deractor{private: string tools;//附加的功能public: DeractorB_train(human* person):Deractor(person){}; void Settrain(const string& str) { this->tools=str; } string Gettrain() { return this->tools; } void goHome() { a->goHome(); Settrain("+train"); cout<<Gettrain(); }};int _tmain(int argc, _TCHAR* argv[]){ human *a(new man("KK"));//定义一个人指针,指向一个男人。 human *b(new DeractorA_Car(a));//对a指向的男人复制一个,且增加新的功能:有车 human *c(new DeractorB_train(b)); c->goHome();//配上地铁和车后 //动态功能撤销 cout<<endl; b->goHome();//撤销通过“坐火车”回家的附加装饰功能 cout<<endl; a->goHome();//撤销“做汽车”、“坐火车” 功能 return 0;}
0 0
- 装饰者模式(C++)
- 装饰者模式(C++)
- 装饰者模式(c++)
- 装饰模式(c++)
- 装饰模式(C++)
- (C++)设计模式------装饰者模式 decorator
- 设计模式——装饰者模式(c++)
- 设计模式——装饰者模式(C++)
- C#--设计模式之装饰者模式
- 【C++】Chapter3:装饰模式
- Objective C--装饰模式
- Objective C 装饰模式
- 装饰模式 C#
- 【C++】装饰器模式
- 装饰者模式 (Decorator)
- Decorator(装饰者)模式
- 装饰者模式(Decorator)
- 装饰者模式(Decorator)
- 【LEETCODE】106-Construct Binary Tree from Inorder and Postorder Traversal
- 一. AWK入门指南
- 汇编和C实现 Hello, world! 之比较
- C++基础::语法特性::函数重写(override)与协变返回类型(covariant return type)
- 偶然得到的一张设计流程图
- 装饰者模式(C++)
- linux awk 内置函数详细介绍(实例)
- 关于Tomcat服务器中使用jsp找不到图片存放路径的问题
- Eclipse取消设置项目默认空间
- H264码流结构分析
- 【Java并发编程】:使用wait/notify/notifyAll实现线程间通信的几点重要说明
- 业余前端 --2天的工作总结[留着以后看,需要的也方便借鉴]
- 再议raw_input
- msp430 看门狗设置