标签:装饰流 code 相同 测试 cheng 内容 main info name
声明:本文部分图片及内容引用自:https://www.cnblogs.com/qiumingcheng/p/5219631.html
举一个形象的例子,人可以说话,而扩音器可以对人说的话进行扩音。所以扩音器就是一个装饰器。
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流中有三个常用的装饰器类,他们分别是:BufferedInputStream、DataInputStream、ObjectInputStream
他们抽象基类为:FilterInputStream
标签:装饰流 code 相同 测试 cheng 内容 main info name
原文地址:https://www.cnblogs.com/Scorpicat/p/11920428.html