装饰器模式

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(""));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容