结构类——装饰者模式

装饰者模式

  • 定义:动态地给一个对象添加一些额外的职责就增加功能来说,装饰模式相比生成子类更为灵活。

  • UML类图:
    装饰者模式
  • 综合分析:

    优点:

    1. 装饰者和被装饰者相互解藕。
    2. 继承的替换方案,更灵活地实现“继承”特性。
    3. 动态的扩展功能类,完全符合“开闭原则”。

    缺点:

    1. 多层装饰,会造成代码复杂性。

    适用场景:

    1. 扩展一个类的功能。
    2. 功能的多变性,随时动态增加功能。
    3. 为一批兄弟类进行改装,首选装饰者模式。
  • 总结:装饰者模式的关键在于Component的operate()方法,整个模式都是以该方法展开装饰。思想需要大家去琢磨和体会,加油!

装饰者模式实践

组建抽象类

    public abstract class Component{
        public abstract void operate();
    }

被装饰类

    public class ConcreteComponent extends Component {
        @Override
        public void operate() {
            System.out.println("I am a Component!");
        }
    }

装饰类组

    public abstract class AbstractDecorator extends Component {
        public Component component = null;
        public AbstractDecorator(Component c) {
            component = c;
        }
        @Override
        public abstract void operate();
    }
    
    public class ConcreteDecoratorA extends AbstractDecorator {
        public ConcreteDecoratorA(Component c) {
            super(c);
        }
        @Override
        public void operate() {
            component.operate();
            System.out.println("Add DecoratorA");
        }
    }
    
    public class ConcreteDecoratorB extends AbstractDecorator {
        public ConcreteDecoratorB(Component c) {
            super(c);
        }
        @Override
        public void operate() {
            System.out.println("Add DecoratorB");
            component.operate();
        }
    }

客户端类

public class client {
    public static void main(String[] args) {
        Component component = new ConcreteComponent();
        component = new ConcreteDecoratorA(component);
        component.operate();
        component = new ConcreteDecoratorB(component);
        component.operate();
    }
}

源代码

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 复杂的奖金计算## 考虑这样一个实际应用:就是如何实现灵活的奖金计算。 奖金计算是相对复杂...
    七寸知架构阅读 4,045评论 4 67
  • 前言 本文的主要内容: 介绍装饰者模式 示例 源码分析装饰者模式的典型应用Java I/O 中的装饰者模式spri...
    小旋锋的简书阅读 1,291评论 0 3
  • 设计模式 一、什么是装饰模式 装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方...
    凯玲之恋阅读 938评论 0 2
  • 在《JAVA与模式》一书开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装模式。装饰模式以对客户端...
    笨笨翔阅读 383评论 0 2
  • 那些兵荒马乱的日子 鸡毛也是令箭 也曾张牙舞爪 也曾信马由缰 原来峥嵘的青春 无视高大 原来脆弱的生命 诙谐也荒谬...
    凌空chL5658阅读 529评论 13 31