美文网首页
设计模式之旅10--装饰模式

设计模式之旅10--装饰模式

作者: 小楠总 | 来源:发表于2018-07-18 09:27 被阅读87次

1. 定义

装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。装饰模式中,通过装饰者给被装饰者扩展了功能。

装饰模式

2. 使用场景

  • 需要扩展一个类的功能,或给一个类增加附加功能。
  • 需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
  • 需要为一批的兄弟类进行改装或加装功能,当然是首选装饰模式。
  • Java中的IO流的架构。
  • Android中的Context家族。

3. 实现

被装饰者的抽象及其实现:

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

public class ConcreteComponent extends Component {

    @Override
    public void operate() {
        System.out.println("operate");
    }
}

装饰者的抽象:

public abstract class Decorator extends Component {

    private Component mComponent;

    public Decorator(Component component) {
        mComponent = component;
    }

    @Override
    public void operate() {
        //委托给被修饰者去执行对应的方法
        this.mComponent.operate();
    }
}

装饰者的具体实现:

public class ConcreteDecorator1 extends Decorator{

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

    @Override
    public void operate() {
        decorate1();
        super.operate();
    }
    
    public void decorate1() {
        System.out.println("修饰方法1");
    }
}

public class ConcreteDecorator2 extends Decorator {

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

    @Override
    public void operate() {
        decorate2();
        super.operate();
    }

    public void decorate2() {
        System.out.println("修饰方法2");
    }
}

场景类:

public class Client {

    public static void main(String[] args) {
        Component component = new ConcreteDecorator1(new ConcreteDecorator2(new ConcreteComponent()));
        component.operate();
    }

}

运行结果:

修饰方法1
修饰方法2
operate

4. 优点

  • 装饰模式可以动态地扩展一个实现类的功能。
  • 装饰模式是继承关系的一个替代方案。不管装饰多少层,最终返回的对象还是抽象类。
  • 装饰类和被装饰类可以独立发展,而不会相互耦合。

5. 缺点

  • 多层的装饰是比较复杂的。
  • 应该尽量减少装饰类的数量,以便降低系统的复杂度。

相关文章

  • 设计模式之旅10--装饰模式

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

  • 设计模式系列10--装饰者模式

    大部分公司都有销售团队,假设老板给你布置了一个任务,让你按照下面的要求开发一套程序来计算销售团队每个月的工资。 每...

  • 9、结构型模式-装饰器设计模式

    1、如虎添翼的设计模式-装饰器设计模式 简介:讲解-装饰器设计模式介绍和应用场景 装饰器设计模式(Decorato...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • 11.4设计模式-装饰模式-讲解

    设计模式-装饰模式 装饰模式详解 装饰模式在android中的实际运用,避免了耦合 1. 装饰模式详解 2.装饰模...

  • 设计模式

    设计模式 单例模式、装饰者模式、

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • JavaScript 设计模式核⼼原理与应⽤实践 之 结构型设计

    JavaScript 设计模式核⼼原理与应⽤实践 之 结构型设计模式 装饰器模式,又名装饰者模式。它的定义是“在不...

  • 8种设计模式:

    主要介绍 单例设计模式,代理设计模式,观察者设计模式,模板模式(Template), 适配器模式,装饰模式(Dec...

  • iOS开发之设计模式 - 装饰模式

    由《大话设计模式 - 装饰模式》的OC和部分Swift的语言转义 装饰模式 继上一篇《策略模式》 装饰模式,动态地...

网友评论

      本文标题:设计模式之旅10--装饰模式

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