概念
装饰模式又名包装模式,用于扩展对象的功能,是继承关系的一个替代方案。
装饰模式可以在不改变原类的情况下,动态扩展一个对象的功能,它通过创建一个装饰对象来包裹真实对象
装饰器用来包装原有的类,在对使用者透明的情况下做功能的增强
装饰模式就好像穿了一层层的外壳,这种方式避免了通过继承来为类型添加新的职责,通过继承的方式容易造成子类膨胀
特点:
装饰对象和真实对象有相同的接口,这样客户端就能以和真实对象相同的方式和装饰对象交互
装饰对象包含一个真实对象引用,装饰对象接收客户端请求,它把这些请求转发给真实对象
装饰对象可以在转发请求之前或之后增加一些附加功能。在面向对象设计中,通常通过继承来实现给定类的功能扩展
何时使用:
类已存在,在不改变原类的情况下,扩展一个类的功能
需要动态的给一个对象增加功能,这些功能可以再动态撤销
需要增加一些基本功能的排列组合而产生非常大的功能,从而使得继承不现实
Demo
比如.net中BufferedStream就是装饰器类,为Stream类实现了缓冲功能
FileStream fs = File.Open("C://1.txt", FileMode.Open);
MemoryStream ms = new MemoryStream();
BufferedStream bs1 = new BufferedStream(fs);//为FileStream提供缓冲功能
BufferedStream bs2 = new BufferedStream(ms);//为MemoryStream提供缓冲功能