11 IO流——装饰器设计模式,Filter装饰流

Posted scorpicat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于11 IO流——装饰器设计模式,Filter装饰流的主要内容,如果未能解决你的问题,请参考以下文章

10.9-全栈Java笔记:装饰器模式构建IO流体系

装饰器模式

java _io_字节缓冲流(装饰器)输入输出

java----IO

java----IO

根据IO流源码深入理解装饰设计模式使用