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),例如原味咖啡。客户可以选择的基础咖啡类型可能包括拿铁、卡布奇诺等,这些都...
Spring 设计模式之装饰器模式详解 在软件设计中,经常会遇到需要在不修改原有代码的情况下,添加新的功能或行为。这时,装饰器模式便可以发挥其作用。在 Spring 设计模式中,装饰器模式是非常重要的一种设计模式。 ...
在给定的标题“设计模式之装饰模式”中,我们可以深入探讨以下几个方面: 1. **装饰模式的基本结构**:装饰模式通常包括四个角色:抽象组件(Component)接口,具体组件(Concrete Component)类,抽象装饰...
装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...
9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版方法+责任链+策略+工厂方法 3 动态代理+Spring AOP 4 责任链模式进阶 Spring Framework设计模式 ...
设计模式分为三类:创建型模式(如单例模式、工厂方法模式)、结构型模式(如代理模式、装饰器模式)和行为型模式(如观察者模式、策略模式)。每种模式都有其特定的用途和适用场景。 4. **具体设计模式详解** - ...
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...
设计模式精解(Design Patterns Explained) 译者:熊节 编者:(美国)(Shalloway Alan)沙洛韦 (美国)(Trott James R.)特罗特 本书从一个新的视角描述面向对象设计,将面向中对象编程的原则与运用设计模式力量创建...
装饰者模式是面向对象设计模式中的一个重要概念,它在C#等编程语言中广泛应用。这个例子以星巴克咖啡为例,展示了如何使用装饰者模式来灵活地扩展对象的功能,而无需修改原有代码。 装饰者模式的核心思想是动态地将...
在软件开发领域,设计模式是一种经过时间和实践验证的解决方案,用于解决常见的设计问题。这些模式是面向对象编程中的宝贵资源,因为它们提供了一种标准化的方法来处理对象间的交互和结构。"C#设计模式"这一主题,...
8. 装饰模式(Decorator):动态地给一个对象添加一些额外的职责。装饰者模式可以用来扩展功能,而无需修改原有代码。 9. 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。代理模式常用于远程...
这里我们探讨的“Java之23种设计模式完整代码”是一份宝贵的资源,它包含了所有23种经典设计模式的实现示例。这份资料能够帮助开发者深入理解每种设计模式的概念、应用场景以及它们之间的差异。 设计模式是经过时间...
《设计模式:可复用面向对象软件的基础》是一本由Erich Gamma、Richard Helm等四位国际知名的软件工程师共同编写的经典之作,该书提供了面向对象软件设计中常用的模式,并通过具体的案例解释了这些模式如何帮助解决...
"设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...
总的来说,装饰者模式是一种强大的设计模式,它提供了一种在运行时动态调整对象行为的方法,使得代码更具灵活性和可扩展性。通过理解和熟练运用装饰者模式,我们可以更好地应对软件需求的变化,提高代码的可维护性和...
设计模式 的分类 总体来说设计模式分为三大类: 创建型模式(5): 工厂方法模式 、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式(7): 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、...
在"JAVA设计模式之装饰模式代码"的示例中,我们可能会看到以下类结构: - `Component`:定义了装饰模式的基本接口,例如`Coffee`接口,包含了一些基本行为如`prepare()`。 - `Coffee`:实现了`Component`接口,代表...
装饰模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式在软件工程中非常常见,因为它提供了灵活性,使得我们可以独立于对象的组合来扩展功能。 在C++中,装饰...
装饰者模式是面向对象设计模式的一种,主要用于动态地给一个对象添加一些额外的职责,而不会改变该对象的类。这种模式允许我们独立于对象的类来扩展对象的功能,为对象提供新的行为,同时保持了代码的可读性和可维护...