美文网首页
java设计模式 - 装饰器模式

java设计模式 - 装饰器模式

作者: CXY_XZL | 来源:发表于2021-04-27 20:42 被阅读0次

    1.定义

    指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。
    装饰器模式的主要优点有:
    1.装饰器是继承的有力补充,比继承灵活,在不改变原有对象的情况下,动态的给一个对象扩展功能,即插即用
    2.通过使用不用装饰类及这些装饰类的排列组合,可以实现不同效果
    3.装饰器模式完全遵守开闭原则


    2.结构

    1.抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。
    2.具体构件(ConcreteComponent)角色:实现抽象构件,通过装饰角色为其添加一些职责。
    3.抽象装饰(Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
    4.具体装饰(ConcreteDecorator)角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。

    结构图.png

    3.代码

    public class DecoratorPattern {
        public static void main(String[] args) {
            Component p = new ConcreteComponent();
            p.operation();
            System.out.println("---------------------------------");
            Component d = new ConcreteDecorator(p);
            d.operation();
        }
    }
    //抽象构件角色
    interface Component {
        public void operation();
    }
    //具体构件角色
    class ConcreteComponent implements Component {
        public ConcreteComponent() {
            System.out.println("创建具体构件角色");
        }
        public void operation() {
            System.out.println("调用具体构件角色的方法operation()");
        }
    }
    //抽象装饰角色
    class Decorator implements Component {
        private Component component;
        public Decorator(Component component) {
            this.component = component;
        }
        public void operation() {
            component.operation();
        }
    }
    //具体装饰角色
    class ConcreteDecorator extends Decorator {
        public ConcreteDecorator(Component component) {
            super(component);
        }
        public void operation() {
            super.operation();
            addedFunction();
        }
        public void addedFunction() {
            System.out.println("为具体构件角色增加额外的功能addedFunction()");
        }
    }
    

    执行结果如下:

    创建具体构件角色
    调用具体构件角色的方法operation()
    ---------------------------------
    调用具体构件角色的方法operation()
    为具体构件角色增加额外的功能addedFunction()
    

    4.参考

    装饰器模式(装饰设计模式)详解

    相关文章

      网友评论

          本文标题:java设计模式 - 装饰器模式

          本文链接:https://www.haomeiwen.com/subject/cuuprltx.html