装饰者模式指的是动态的将责任附加到对象上,想要扩展其功能,装饰者提供有别于继承的另一种选择。(参考《Head First 设计模式》)
个人理解:装饰者就是一种类包类 就是在构造函数里面,添加类作为参数。
装饰者模式原则
- 封装变化
- 多用组合,少用继承
- 针对接口编程,不针对实质编程
- 为交互对象的松耦合设计而努力
- 对扩展开放,对修改关闭
装饰者模式实例
- 例如男生和女生可以被认为是被装饰者,洗澡和吃饭可以理解为装饰行为, 就是装饰者模式,在我看来最大的好处 就是行为与行为者可以分开,毕竟好扩展。 就是可以今天是男生洗澡,女生吃饭, 也可以是女生洗澡 男生吃饭。 接下来来实现这一行为
首先是基准类的头文件,男生女生都是人 所以以人作为基准类的声明如下,定义了两个纯虚函数,一个是人的类别,一个是人的行为。
//所有的基类 人 class People { public: virtual void personType()= 0; //人的类型 virtual void personAction() = 0; //人的活动 };
接下来是被装饰者男生女生各自的类的行为和活动
头文件:
//被装饰者 :男生 class Boy:public People { public: //继承人的两个方法 void personType(); void personAction(); }; //被装饰者:女生 class Girl:public People { public: void personType(); void personAction(); };
各自类的实现如下:
//实现相关类 //男生类 void Boy::personType() { cout << "Boy:" << endl; } void Boy::personAction() { cout << "Boy要做的事情是" << endl; } //女生类 void Girl::personType() { cout