装饰者模式
1. 介绍
1.1 什么是装饰者模式
动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。
1.2 优点
装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。
1.3 缺点
多层装饰比较复杂。
1.4 使用场景
- 扩展一个类的功能。
- 动态增加功能,动态撤销。
1.5 策略模式包含以下几个核心角色
- 抽象组件(Component):定义了原始对象和装饰器对象的公共接口或抽象类,可以是具体组件类的父类或接口。
- 具体组件(Concrete Component):是被装饰的原始对象,它定义了需要添加新功能的对象。
- 抽象装饰器(Decorator):继承自抽象组件,它包含了一个抽象组件对象,并定义了与抽象组件相同的接口,同时可以通过组合方式持有其他装饰器对象。
- 具体装饰器(Concrete Decorator):实现了抽象装饰器的接口,负责向抽象组件添加新的功能。具体装饰器通常会在调用原始对象的方法之前或之后执行自己的操作。
2. 通用实现
3. 示例
4. JDK中装饰者模式实践
4.1 I/O流 (InputStream)
如图中InputStream设计就是一个典型的装饰者模式
- InputStream 是抽象组件
- ObjectInputStream 、FileInputStream、ByteArrayInputStream、PipedInputStream是具体组件
- FilterInputStream 是抽象装饰器
- InflaterInputStream、PushbackInputStream、BuffedInputStream、ZipInputStream、DataInputStream 是具体装饰器。
InputStream in = new FileInputStream("");
BufferedInputStream bufferIn = new BufferedInputStream(in);
bufferIn.read();
评论区