介绍
装饰模式是一种结构型设计模式, 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。
真实世界类比
穿上多件衣服将获得组合性的效果。
穿衣服是使用装饰的一个例子。 觉得冷时, 你可以穿一件毛衣。 如果穿毛衣还觉得冷, 你可以再套上一件夹克。 如果遇到下雨, 你还可以再穿一件雨衣。 所有这些衣物都 “扩展” 了你的基本行为, 但它们并不是你的一部分, 如果你不再需要某件衣物, 可以方便地随时脱掉。
装饰模式示例:
我们将创建一个 Shape 接口和实现了 Shape 接口的实体类。然后我们创建一个实现了 Shape 接口的抽象装饰类 ShapeDecorator,并把 Shape 对象作为它的实例变量。
RedShapeDecorator 是实现了 ShapeDecorator 的实体类。
DecoratorPatternDemo 类使用 RedShapeDecorator 来装饰 Shape 对象。
执行程序,输出结果:
Circle with normal border
Shape: Circle
Circle of red border
Shape: Circle
Border Color: Red
Rectangle of red border
Shape: Rectangle
Border Color: Red
抽象装饰器类ShapeDecorator调用通用的方法,具体装饰器类RedShapeDecorator进行功能的增强。
在 Java 中使用模式
识别方法: 装饰可通过以当前类或对象为参数的创建方法或构造函数来识别。
1、java.io.InputStream
、 OutputStream
、 Reader
和 Writer
的所有代码都有以自身类型的对象作为参数的构造函数。
2、java.util.Collections
; checkedXXX()
、 synchronizedXXX()
和 unmodifiableXXX()
方法。
3、javax.servlet.http.HttpServletRequestWrapper
和 HttpServletResponseWrapper
转:https://refactoring.guru/
转:https://www.runoob.com/design-pattern/decorator-pattern.html