【设计模式之禅】 装饰模式

装饰模式

Decorator Design Pattern

定义:

Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.

动态地将额外职责附加到对象上,装饰器为子类提供类灵活的代替方法来扩展功能。

目的就是需要对类添加功能的时候,不要创建多个子类,而是采用装饰模式来扩展功能

定义角色:
  • Component 抽象组件 :Component是一个接口或者抽象类,是定义我们的核心对象的

  • ConcreteComponent 具体组件:就是未来你需要装饰的具体对象

  • Decorator 装饰者角色:一般是个抽象类,对Component进行装饰,所以它的属性里一定有个private变量指向Component

  • ConcreteDecorator..具体的装饰者角色 : 可以有很多个。就是对把核心、原始的东西进行具体的装饰。

通用代码:
//Component
public abstract class Component {
    public abstract void operate();
}
//ConcreteComponent
public class ConcreteComponent extends Component {
    @Overrid
    public void operate() {
        //具体做些事情
        ...
    }
}
//Decorator
public abstract class Decorator extends Component {
    private Component component = null;
    public Decorator(Component component) {
        this.component = component;
    }
    //将功能委托给装饰者执行
    @Override
    public void operate() {
        this.component.operate();
    }
}

具体的装饰类

// ConcreteDecorator1
public class ConcreteDecorator1 extends Decorator {
    //定义被修饰者
    public ConcreteDecorator1(Component component) {
        super(component);
    }
    private void amplify1() {
        System.out.println("amplify1 修饰");
    }
    //重写父类的Operation方法
    @Override
    public void operate(){
        this.amplify1();
        super.operate();
    }
}

// ConcreteDecorator2
public class ConcreteDecorator2 extends Decorator {
    //定义被修饰者
    public ConcreteDecorator2(Component component) {
        super(component);
    }
    private void amplify2() {
        System.out.println("amplify2 修饰");
    }
    //重写父类的Operation方法
    @Override
    public void operate(){
        super.operate();
        this.amplify2();
    }

}
//场景使用
public class Client {
    public static void main() {
        Component component = new ConcreteComponent();
        component = new ConcreteDecorator1(component);
        component = new ConcreteDecorator2(component);
        component.operate();
    }
}
优点:
  • 装饰类Decorator和被装饰类Component可以独立发展,不会相互耦合.因为Decorator是从外部来扩展Component的功能.
  • 装饰模式是继承关系的一种替代方案,无论Decorator装饰了多少层,最后返回的对象还是Component.(他们包装的一层一层的,和递归一样)
  • 装饰模式可以动态扩展一个实现类的功能.
缺点:
  • 多层的装饰非常复杂.如同剥洋葱一样
应用:
  • 当需要扩展一个类的功能,或者给一个类增加附加功能
  • 需要动态给对象增加功能,还可以动态撤销
  • 需要给一批兄弟类进行改装或者扩展功能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《设计模式之禅第3版pdf》是一本介绍设计模式的书籍,是作者秦小波总结多年编程和软件开发实践的经验而得出的结论。该书提供了许多实用的设计模式,这些模式可以帮助开发人员更好地编写可维护、可扩展和可重用的代码。 该书首先介绍了设计模式的基本概念和原则,例如SOLID原则和GRASP原则,然后详细介绍了23种常见的设计模式,包括创建型、结构型和行为型模式。 该书的优点在于,它不仅提供了许多具体的代码示例和实际应用场景,还深入解释了每个模式的原理和适用条件。此外,该书还提供了设计模式的演化历程,以及如何使用UML图形表示不同的模式。 虽然该书提供了丰富的知识,但它并不是一本初学者可以轻松掌握的书籍。初学者可能需要花费很多时间和精力来理解书中的概念和代码实例。与此同时,该书的代码示例使用Java语言,因此对于非Java开发人员可能需要适当地进行转换。 综上所述,《设计模式之禅第3版pdf》是一本非常有价值的设计模式书籍,对于希望提高代码质量和扩展性的开发人员来说,是一本必读之作。 ### 回答2: 《设计模式之禅第3版》是一本关于对象设计模式的经典著作,是程序员学习设计模式的一本不可或缺的参考书。该书共分为3部分,包含了23种设计模式,并以生动的例子和详细的代码展示了如何应用各种设计模式解决实际问题。 第一部分介绍了7种创建型模式,这些模式主要用于创建对象。其中包括了工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式、享元模式和对象池模式。通过这一部分的学习,读者可以了解到如何灵活地创建对象,避免了对象创建过程中出现的一些问题。 第二部分介绍了11种结构型模式,这些模式主要用于组织类和对象。其中包括了适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、代理模式、管道过滤器模式、私有类数据模式、模板方法模式和访问者模式。通过这一部分的学习,读者可以学会如何组织各种不同类和对象之间的关系,从而更加有条理地编写代码。 第三部分介绍了5种行为型模式,这些模式主要用于管理对象之间的交互和职责。其中包括了责任链模式、命令模式、解释器模式、迭代器模式和观察者模式。通过这一部分的学习,读者可以学会如何精确地定义对象之间的互动和职责,从而更好地解决实际问题。 总体而言,《设计模式之禅第3版》由浅入深,结构清晰,用通俗易懂的语言阐述了设计模式的本质和应用,是程序员进行设计模式学习和应用的一本宝典。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值