1、什么是装饰器模式?
装饰类对被装饰类进行封装,可以对原有的功能之上扩展功能。
2、有什么好处?
装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。
以监控进程这个功能为例
监控器
public interface Monitor {
public String monitorProcess();
}
这个类是已有的功能,用来监控内存
public class CacheMonitor implements Monitor {
@Override
public String monitorProcess() {
System.out.println("监控内存");
return null;
}
}
这个类对Monitor 进行装饰,具体实现由子类实现
public abstract class MonitorDecorator implements Monitor{
protected Monitor monitor;
}
这个是MAT监控内存功能,只不过是多了个牌子,实际的监控内存功能还是由具体的Monitor实现
public class MATCacheMonitor extends MonitorDecorator {
public MATCacheMonitor(Monitor monitor){
this.monitor = monitor;
}
@Override
public String monitorProcess() {
monitor.monitorProcess();
// 监控完内存打印细节
printDetail();
return null;
}
private void printDetail(){
System.out.println("当前已使用的内存为18M");
}
}
main
public class Main {
public static void main(String[] args) {
Monitor monitor = new MATCacheMonitor(new CacheMonitor());
monitor.monitorProcess();
}
}

image.png
jdk的InputStream也是装饰器实现,像这样
InputStream inputStream = new FileInputStream(new File(""));