zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    算法
    算法
    算法
    算法
    算法
    【PAT】B1064 朋友数(20 分)
    【PAT】B1065 单身狗(25 分)
    【PAT】B1066 图像过滤(15 分)
    【PAT】B1067 试密码(20 分)
    【PAT】B1068 万绿丛中一点红(20 分)
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/11920428.html
Copyright © 2011-2022 走看看