装饰者模式
一、装饰者模式的相关概念和案例
1、装饰者模式概念
装饰者模式: 在已经有的功能上
,将新的功能附加到已有的功能上
,在对象功能拓展方面
,比继承更有弹性
,该模式体现了开闭原则(OCP)
。
提到装饰者模式,最经典的就是Java IO
包中的使用,也是我们学习Java语言中最先遇到的应用该模式的模块。
2、装饰者模式的案例
例如:为了快速的从OutputStream流写数据
,可以使用BufferedOutputStream
装饰该流,被它装饰过的流增加缓冲数据的功能
。
从上面的栗子来看,装饰者模式让我们可以在运行时动态增强该对象的功能
,不影响原来代码使用
。同时有拓展了新的功能。
所以将装饰者模式,我们就通过Java IO中的源码进行分析,充分了解装饰者模式
。
一言不合上代码:
package design.model.decorator;
import java.io.*;
public class FileCopyTest {
public static void main(String[] args) {
File file = new File("D:/text.txt");
File copyFile = new File("D:/test_copy.txt");
try (FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(copyFile);
BufferedInputStream bis = new BufferedInputStream(fis,1024);
BufferedOutputStream bos = new BufferedOutputStream(fos,1024)) {
byte[] bytes = new byte[1024];
int hasRead = 0;
while ((hasRead =bis.read(bytes))>0){
bos.write(bytes, 0,hasRead);
}
}catch (FileNotFoundException e)