装饰模式适合于之前定义的某个类不够好用或者功能需要扩展,现在用一个新类继承,重写其方法。
代码演示(模拟java jdk中的FileInputStream和BufferedInputStream)
抽象类
package com.wmx.zhuangshi;
public abstract class InputStream {
public abstract int read();
public abstract int read(byte[] buf);
}
子类
package com.wmx.zhuangshi;
public class FileInputStream extends InputStream {
@Override
public int read() {
System.out.println("低性能的进行读取");
return 95;
}
@Override
public int read(byte[] buf) {
System.out.println("低性能的进行读取");
buf[0] = 95;
buf[1] = 96;
buf[2] = 97;
return 3;
}
}
装饰类
package com.wmx.zhuangshi;
public class BufferedInputStream extends FileInputStream {
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[] buf) {
System.out.println("缓冲8KB字节进行高效读取");
return is.read(buf);
}
}
测试类
package com.wmx.zhuangshi;
public class Test {
public static void main(String[] args) {
BufferedInputStream bi = new BufferedInputStream(new FileInputStream());
bi.read();
}
}
至此,装饰模式讲解完毕,有疑问的可以下方留言,相互学习,我是心哥说编程,致力于成为一个编程大牛编程爱好者。