`

《设计模式》之十二:装饰模式

阅读更多

Decorator Pattern 装饰器模式是一种比较常见的模式,其定义如下:Attach additional responsibility to an object dynamically keeping the same interface. Decorators provide a flexible alternative to subclassing for extending functionality.

 

通用模板代码:

先定义最基本的需要修饰的Component抽象类

public abstract class Component {
    // 抽象方法
    public abstract void operate();
}

 实现类:

public class ConcreteComponent extends Component {
    @Override
    public void operate() {
        System.out.println("do something...");
    }
}

 抽象的装饰者:

public abstract class Decorator extends Component {
    private Component component = null;
    // 通过构造函数传递被修饰者
    public Decorator(Component _component) {
        this.component = _component;
    }

    // 委托给被修饰者执行
    @Override
    public void operate() {
        this.component.operate();
    }
}

 两个实现类:

public class ConcreteDecorator1 extends Decorator {
    public ConcreteDecorator1(Component _component) {
        super(_component);
    }

    private void method1() {
        System.out.println("method1 修饰");
    }

    // 重写父类的operate方法
    @Override
    public void operate() {
        this.method1();
        super.operate();
    }
}

 

public class ConcreteDecorator2 extends Decorator {
    public ConcreteDecorator2(Component _component) {
        super(_component);
    }

    private void method2() {
        System.out.println("method2 修饰");
    }

    // 重写父类的operate方法
    @Override
    public void operate() {
        super.operate();
        this.method2();
    }
}

 最后是应用场景:

public class Client {
    public static void main(String[] args) {
        Component component = new ConcreteComponent();
        // 第一次修饰
        component = new ConcreteDecorator1(component);
        // 第二次修饰
        component = new ConcreteDecorator2(component);
        //修饰后运行
        component.operate();
    }
}

 

装饰模式优点:

1,装饰类和被装饰类可以独立发展,而不会耦合。Component类无需知道Decorator类,而Decorator类也不用知道具体的构件

2,装饰模式是继承关系的一个替代方案。我们看装饰类Decorator,不管装饰多少层,返回对象还是Component,实现的还是is-a的关系。

3,装饰模式可以动态扩展一个实现类的功能,这不需要多说。

 

装饰模式缺点:

多层的装饰是比较复杂的

 

装饰模式的使用场景:

1,需要扩展一个类的功能,或给一个类增加附加功能

2,需要动态给一个对象增加功能,这些功能可以再动态撤销

3,需要为一批兄弟类进行改装或加装功能,当然首选装饰模式

 

本人博客已搬家,新地址为:http://yidao620c.github.io/

分享到:
评论

相关推荐

    设计模式之装饰模式:以售卖咖啡为例

    在"设计模式之装饰模式:以售卖咖啡为例"的场景中,我们可以详细解析其应用。 首先,咖啡的选择过程可以看作是基础产品(Component),例如原味咖啡。客户可以选择的基础咖啡类型可能包括拿铁、卡布奇诺等,这些都...

    54-Spring设计模式之装饰器模式1

    Spring 设计模式之装饰器模式详解 在软件设计中,经常会遇到需要在不修改原有代码的情况下,添加新的功能或行为。这时,装饰器模式便可以发挥其作用。在 Spring 设计模式中,装饰器模式是非常重要的一种设计模式。 ...

    设计模式之装饰模式

    在给定的标题“设计模式之装饰模式”中,我们可以深入探讨以下几个方面: 1. **装饰模式的基本结构**:装饰模式通常包括四个角色:抽象组件(Component)接口,具体组件(Concrete Component)类,抽象装饰...

    设计模式--装饰者模式java例子

    装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...

    Java 经典设计模式讲解以及项目实战

    9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版方法+责任链+策略+工厂方法 3 动态代理+Spring AOP 4 责任链模式进阶 Spring Framework设计模式 ...

    设计模式:可复用面向对象软件的基础(非扫描版+高清)

    设计模式分为三类:创建型模式(如单例模式、工厂方法模式)、结构型模式(如代理模式、装饰器模式)和行为型模式(如观察者模式、策略模式)。每种模式都有其特定的用途和适用场景。 4. **具体设计模式详解** - ...

    C#设计模式之Decorator 装饰模式

    装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...

    设计模式精解 译者:熊节 程序员必看书籍之一 part2

    设计模式精解(Design Patterns Explained) 译者:熊节 编者:(美国)(Shalloway Alan)沙洛韦 (美国)(Trott James R.)特罗特 本书从一个新的视角描述面向对象设计,将面向中对象编程的原则与运用设计模式力量创建...

    设计模式:可复用面向对象软件的基础.zip

    8. 装饰模式(Decorator):动态地给一个对象添加一些额外的职责。装饰者模式可以用来扩展功能,而无需修改原有代码。 9. 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。代理模式常用于远程...

    c# ,设计模式,装饰者模式,星巴兹咖啡

    装饰者模式是面向对象设计模式中的一个重要概念,它在C#等编程语言中广泛应用。这个例子以星巴克咖啡为例,展示了如何使用装饰者模式来灵活地扩展对象的功能,而无需修改原有代码。 装饰者模式的核心思想是动态地将...

    《设计模式:可复用面向对象软件的基础》英文版

    《设计模式:可复用面向对象软件的基础》是一本由Erich Gamma、Richard Helm等四位国际知名的软件工程师共同编写的经典之作,该书提供了面向对象软件设计中常用的模式,并通过具体的案例解释了这些模式如何帮助解决...

    C#设计模式(设计模式的思想:对通用的对象间的相互作用方式进行记录和编目)

    在软件开发领域,设计模式是一种经过时间和实践验证的解决方案,用于解决常见的设计问题。这些模式是面向对象编程中的宝贵资源,因为它们提供了一种标准化的方法来处理对象间的交互和结构。"C#设计模式"这一主题,...

    java之23种设计模式完整代码

    这里我们探讨的“Java之23种设计模式完整代码”是一份宝贵的资源,它包含了所有23种经典设计模式的实现示例。这份资料能够帮助开发者深入理解每种设计模式的概念、应用场景以及它们之间的差异。 设计模式是经过时间...

    设计模式之美——教你写出高质量代码

    "设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...

    23种设计模式详解PDF

    设计模式 的分类 总体来说设计模式分为三大类: 创建型模式(5): 工厂方法模式 、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式(7): 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、...

    设计模式之装饰者模式,内含可运行代码

    总的来说,装饰者模式是一种强大的设计模式,它提供了一种在运行时动态调整对象行为的方法,使得代码更具灵活性和可扩展性。通过理解和熟练运用装饰者模式,我们可以更好地应对软件需求的变化,提高代码的可维护性和...

    JAVA设计模式之装饰模式代码

    在"JAVA设计模式之装饰模式代码"的示例中,我们可能会看到以下类结构: - `Component`:定义了装饰模式的基本接口,例如`Coffee`接口,包含了一些基本行为如`prepare()`。 - `Coffee`:实现了`Component`接口,代表...

    设计模式 - 装饰模式(C++实例)

    装饰模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式在软件工程中非常常见,因为它提供了灵活性,使得我们可以独立于对象的组合来扩展功能。 在C++中,装饰...

    java设计模式之装饰者模式代码

    装饰者模式是面向对象设计模式的一种,主要用于动态地给一个对象添加一些额外的职责,而不会改变该对象的类。这种模式允许我们独立于对象的类来扩展对象的功能,为对象提供新的行为,同时保持了代码的可读性和可维护...

Global site tag (gtag.js) - Google Analytics