码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-11-23 23:34:21      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:装饰流   code   相同   测试   cheng   内容   main   info   name   

声明:本文部分图片及内容引用自: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装饰流

标签:装饰流   code   相同   测试   cheng   内容   main   info   name   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!