什么是装饰设计模式?
- 创建一个新类,包装原始类,从而在新类中提升原来类的功能。
装饰设计模式的作用:
- 装饰模式指的是在不改变原类的基础上, 动态地扩展一个类的功能。
总结:个人认为装饰模式就是对对象的一层封装,对于一些性能比较差的对象,可以对其进行封装,在封装类中通过一些方法提高其性能。
测试案例:
我们使用字符输入缓冲流可以加快文件读取的速度,其原理就是装饰模式,BufferedInputStream内部嵌套FileInputStream,并声明一个8KB的缓冲池,提高性能。想要具体了解字符缓冲输入流可以参考文章:https://blog.csdn.net/qq_43751200/article/details/124558433
下面模拟实现过程:
InputStream(抽象父类) FileInputStream(实现子类,读写性能较差) BufferedInputStream(实现子类,装饰类,读写性能高)~~删除线格式~~
创建InputStream抽象类:
// 装饰模式指的是在不改变原类的基础上, 动态地扩展一个类的功能。
public abstract class InputStream {
public abstract int read();
public abstract int read(byte[] buffer);
}
创建FileInputStream继承InputStream抽象类:
import java.util.Arrays;
public class FileInputStream extends InputStream{
@Override
public int read() {
System.out.println("低性能的方式读取一个字节a");
return 97;
}
@Override
public int read(byte[] buffer) {
buffer[0] = 97;
buffer[1] = 98;
buffer[2] = 99;
System.out.println("低性能的方式读取一个字节素组:" + Arrays.toString(buffer));
return 3;
}
}
创建BufferedInputStream继承InputStream抽象类:
public class BufferedInputStream extends InputStream{
private InputStream is;
public BufferedInputStream(InputStream is){
this.is = is;
}
@Override
public int read() {
System.out.println("提供8KB的缓冲区,提高读数据性能~~~");
return is.read();
}
@Override
public int read(byte[] buffer) {
System.out.println("提供8KB的缓冲区,提高读数据性能~~~");
return is.read(buffer);
}
}
测试类DecoratorPattren:
// 装饰模式指的是在不改变原类的基础上, 动态地扩展一个类的功能。
public class DecoratorPattern {
public static void main(String[] args) {
InputStream is = new BufferedInputStream(new FileInputStream());
System.out.println(is.read());
System.out.println(is.read(new byte[3]));
}
}



