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

原文地址:https://www.cnblogs.com/Scorpicat/p/11920428.html