11 IO流(八)——装饰器设计模式,Filter装饰流
声明:本文部分图片及内容引用自:https://www.cnblogs.com/qiumingcheng/p/5219631.html
java装饰器设计模式
举一个形象的例子,人可以说话,而扩音器可以对人说的话进行扩音。所以扩音器就是一个装饰器。
java中就有一套在这样的场景专门使用的设计模式——装饰器模式。
装饰器模式的结构
装饰器的特征:
- 它必须具有一个装饰的对象。
- 它必须拥有与被装饰对象相同的接口。
- 它可以给被装饰对象添加额外的功能。
总结一下就是:保持接口,增强性能。
举一个装饰器的实例:人说话与扩音器扩音(装饰)
public class Demo1_Test { //测试装饰器 public static void main(String[] args){ Person p = new Person("Lily"); p.speak(); Amplifier amp = new Amplifier(p); //推荐直接向下面这样写: Amplifier amp2 = new Amplifier(new Person("采薇")); amp.speak(); amp2.speak(); } } //装饰器与被装饰器都要实现同一个接口 interface Speak { //一个说话功能的接口 void speak(); } //被装饰者Person类 class Person implements Speak { int sound = 10; String name; @Override public void speak(){ System.out.println(name+"的音量为:"+sound); } public Person(String name){ this.name = name; } public Person(){ } } //装饰器(这里是一个扩音器) class Amplifier implements Speak { Person p; //装饰器类必须具有一个被装饰器对象 public Amplifier(Person p){ this.p = p; } @Override public void speak(){ System.out.println(p.name+"扩音后的音量:"+(p.sound*10)); //必须对被装饰的对象添加额外的功能 } }
IO流中的装饰类
IO流中有三个常用的装饰器类,他们分别是:BufferedInputStream、DataInputStream、ObjectInputStream
他们抽象基类为:FilterInputStream