设计模式4-装饰器模式Decorator
装饰器模式属于"单一职责"模式. 在软件组件的设计中,如果责任划分不清晰,使用继承得到的结果,往往是随着需求的变化,子类 急剧膨胀 ,同时充斥着 重复代码 ,这是代码的bad smell. 典型的单一职责模式:Decorator,Bridge.这两种模式表现出了很强的"单一职责模式的味道".本文中我们讨论Decorator模式. 动机 在某些情况下,我们可能会"过度的使用继承来扩展对象的功能",由于继承为类型引入了静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀. 如何使 对象功能的扩展 能够根据需要动态实现,同时避免 扩展功能的增多 带来的子类膨胀问题?从而使得任何 功能扩展变化 所带来的影响最低. 实例 考虑设计一个IO的库,主要是一些流操作.可以首先定义一个基类Stream, //业务操作 class Stream{ public: virtual char Read(int number)=0; virtual void Seek(int postion)=0; virtual void Write (char data)=0; ~Stream() { } }; 基于Stream可以定义文件流,网络流,内存流等派生类,然后重写实现基类的成员函数. class FileStream:public