装饰者模式又叫包装模式,定义如下:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰者模式相比生成子类来说更为灵活。
装饰者模式的类图如上:
从图中可以看到装饰着模式涉及到四个角色:
1.抽象构件角色Component
Component可以是一个接口或者抽象类,主要是定义一些规则
2.具体构件角色ConcreteComponent
ConcreteComponent是抽象构件的实现类同时也是被装饰的对象
3.Decorator抽象装饰者角色
一般是一个抽象者对象,同时实现抽象构件角色中定义的功能,并且含有一个私有属性执行抽象构件
4.具体装饰者角色
主要是用来装饰具体构件角色
/** * 抽象构件 * */ public abstract class Component { // 抽象方法 protected abstract void operation(); }
/** * 具体构件 * */ public class ConcreteComponent extends Component { /** * */ @Override protected void operation() { System.out.println("Hello World!"); } }
public abstract class Decorator extends Component { private Component component; public Decorator(Component component) { this.component = component; } /** * */ @Override protected void operation() { component.operation(); } }
public class ConcreteDecorator extends Decorator { /** * @param component */ public ConcreteDecorator(Component component) { super(component); } // 装饰方法 private void doSomething() { System.out.println("装饰"); } @Override protected void operation() { doSomething(); super.operation(); } }
public class Client { public static void main(String[] args) { //被装饰者 Component component=new ConcreteComponent(); //装饰者 Decorator decorator=new ConcreteDecorator(component); //装饰 decorator.operation(); } }
看完装饰模式大家可能会有一些疑问,不就是要重新扩张一个方法的功能吗?我直接集成具体构件类重写里面的方法不就行了吗?其实装饰者模式是继承关系的一种替代方案,集成是一种高侵入性的,况且我们做开发的也知道,需求是无止境的,你根本不知道用户的需求最终会变成什么样,也许有一天需求变了,那么你难道还要再次集成然后重写里面的方法吗?
装饰者模式的优点:
1.装饰类和被装饰的对象可以独立发展不必互相耦合
2.装饰者模式是继承关系的一种替代
当然装饰者模式也是有缺点的,那就是装饰者的实现类可能会出现类膨胀的情况的,所以是否需要使用装饰者模式就要看具体的情况了。
装饰的使用场景
1.需要扩展一个类的功能或给一个类增加附加功能
2.需要动态的给一个对象增加功能并且这些功能可以动态的撤销
3.需要为一批兄弟类进行改装或增加功能
相信大家都做过文件上传获取其他和IO相关的操作,其实java IO中主要使用模式就是装饰者模式,大家可以想象上面的问题,如果为了增强一个类的功能我们就使用继承的话,那么java IO的实现如果使用继承一定会很可怕的.....
下面是一张java IO使用装饰者模式的简单类图:
相关推荐
装饰者模式(Decorator Pattern)是软件设计模式中的结构型模式之一,它允许在运行时动态地给一个对象添加新的行为或职责,而无需修改对象本身。在Qt库中,装饰者模式也被广泛应用,尤其在实现用户界面组件的扩展和...
总的来说,装饰者模式是一种强大的设计模式,它提供了一种在运行时动态调整对象行为的方法,使得代码更具灵活性和可扩展性。通过理解和熟练运用装饰者模式,我们可以更好地应对软件需求的变化,提高代码的可维护性和...
装饰者模式是面向对象设计模式的一种,主要用于动态地给一个对象添加一些额外的职责,而不会改变该对象的类。这种模式允许我们独立于对象的类来扩展对象的功能,为对象提供新的行为,同时保持了代码的可读性和可维护...
装饰者模式是面向对象设计中的一种结构型模式,它的主要目的是动态地给一个对象添加一些额外的职责,即增加功能,同时又不破坏原有的结构。装饰者模式是一种比继承更灵活的扩展对象行为的方式,它避免了类爆炸问题,...
装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码。这个模式的名字来源于装饰艺术,它通过添加额外的装饰来增强一个物体的外观,同样地,...
装饰者模式是一种设计模式,主要用来在不修改对象原有代码的情况下动态地扩展其功能。这种模式的核心在于,它通过创建包装对象,即装饰者,来实现对原对象功能的增强。装饰者通常与被装饰对象具有相同的接口,使得...
装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...
JavaScript中的装饰者模式是一种设计模式,它允许在不修改原有对象的基础上动态地扩展对象的功能。这种模式在软件工程中尤其有用,因为它可以帮助我们保持代码的灵活性、可读性和可维护性。 装饰者模式的核心思想是...
Spring 设计模式之装饰器模式详解 在软件设计中,经常会遇到需要在不修改原有代码的情况下,添加新的功能或行为。这时,装饰器模式便可以发挥其作用。在 Spring 设计模式中,装饰器模式是非常重要的一种设计模式。 ...
装饰者模式是面向对象设计模式中的一个重要概念,它在C#等编程语言中广泛应用。这个例子以星巴克咖啡为例,展示了如何使用装饰者模式来灵活地扩展对象的功能,而无需修改原有代码。 装饰者模式的核心思想是动态地将...
"设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...
在“设计模式—装饰者模式”中,我们将深入探讨这个模式的概念、实现方式以及实际应用。 装饰者模式的核心概念在于“装饰”(Decorator)和“组件”(Component)。组件是被装饰的基本对象,它可以是接口或者抽象类...
在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...
《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...
软件设计模式之装饰模式讲解ppt,可用于教学课件。
创建型设计模式关注对象的创建过程,如单例模式(Singleton)、工厂模式(Factory)、抽象工厂模式(Abstract Factory)和建造者模式(Builder)。这些模式提供了一种灵活且可扩展的方式来创建和管理对象。 结构型...