Java学习笔记(11)-23种设计模式之装饰模式

2020-02-25  本文已影响0人  非典型程序猿

这篇文章我们开始总结第四种结构型模式,装饰模式。在日常的开发中我们可能会用到一些只有核心功能的类,但还需做更多的扩展功能来满足我们的需求,因此就产生了装饰模式。

定义

指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。

结构

代码示例

public class MyDecoratorTest {
    public static void main(String[] args){
        Component component = new ComponentImp();
        MyDecorator myDecorator = new MyDecorator(component);
        myDecorator.function();
    }

    /**
     * 定义抽象化构建角色
     */
    interface Component{
        void function();
    }
    /**
     * 具体构建角色
     */
    static class ComponentImp implements Component{
        public ComponentImp(){
            System.out.println("创建了具体构建角色 ComponentImp...");
        }
        @Override
        public void function() {
            System.out.println("调用了具体构建角色中的方法 function()...");
        }
    }
    /**
     * 抽象装饰角色
     */
    static class Decorator implements Component{
        private Component component;
        public Decorator(Component component){
            this.component = component;
        }
        @Override
        public void function() {
            System.out.println("调用了抽象装饰角色 Decorator 中的方法");
            component.function();
        }
    }
    /**
     *  具体装饰角色
     */
    static class MyDecorator extends Decorator{

        public MyDecorator(Component component) {
            super(component);
        }

        @Override
        public void function() {
            System.out.println("MyDecorator 开始添加新功能...");
            super.function();
            addFunction();
        }
        /**
         * 添加的新功能
         */
        public void addFunction(){
            System.out.println("MyDecorator 新功能已添加...");
        }

    }
}

代码运行结果

创建了具体构建角色 ComponentImp...
MyDecorator 开始添加新功能...
调用了抽象装饰角色 Decorator 中的方法
调用了具体构建角色中的方法 function()...
MyDecorator 新功能已添加...

我们梳理一下装饰者模式的实现思路

优缺点

上一篇 下一篇

猜你喜欢

热点阅读