装饰模式(Decorator)就是使用被装饰的一个子类的实例,在客户端将这个子类的实例委托给装饰类。装饰模式是结成关系的一个替代方案。
装饰模式以对客户端透明的方式增添了对象的功能,其在与动态的给对象添加了责任,当然这里的继承便是静态的。
其中重要的地方时装饰对象和真实对象有相同的接口,这样客户端就可以和真是对象一样的交互方式和装饰对象交互,然后装饰对象把所有从客户端接收过来的请求全部转发给真是对象,然后在返还给客户端,这样装饰对象就可以再转发前或者以后添加一些附加功能而不影响对真是对象的操作,这样在不改变原有类的基础上,可以实现对于原有类的这种额外功能的实现,增强了程序的复用性。
同时装饰模式比继承好的地方就是,装饰模式可以动态的对已经存在的类进行任意的组合,实现想要的功能,而继承是静态的实现,不能改变原有类的实现,如果要添加更多的功能,只有添加更多的派生类来实现。
下面以员工加工画为例子实现装饰者模式
抽象组件Work.java
package decorator; public abstract class Work { public abstract void painting(); }
装饰者1Work.java
package decorator; public class WorkerOne extends Work { @Override public void painting() { System.out.println("1号员工画画"); } }装饰者3Work.java
package decorator; public class WorkerThree extends Work { //被装饰者 private Work work; public WorkerThree(Work work) { this.work = work; } private WorkerThree() {} @Override public void painting() { System.out.println("3号员工上画框前前的准备工作。"); //被装饰者做的职责 work.painting(); //装饰者做的职责 System.out.println("3号员工上画框。"); } }装饰者2Work.java
package decorator; public class WorkerTwo extends Work { //被装饰者 private Work work; public WorkerTwo(Work work) { this.work = work; } private WorkerTwo() {} @Override public void painting() { System.out.println("2号员工给画上颜色前的准备工作。"); //被装饰者做的职责 work.painting(); //装饰者做的职责 System.out.println("2号员工给画上好了颜色。"); } }测试类
package decorator; public class Test { public static void main(String[] args) { System.out.println("*****只做画画工作*****"); WorkerOne workerOne = new WorkerOne(); workerOne.painting(); System.out.println("*****只做上色工作*****"); WorkerTwo workerTwo = new WorkerTwo(workerOne); workerTwo.painting(); System.out.println("****做全部工作*****"); WorkerThree workerThree = new WorkerThree(workerTwo); workerThree.painting(); } }适用装饰者模式场合:
相关推荐
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...
装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...
【Decorator模式】是一种设计模式,它允许在运行时动态地给对象添加新的责任或功能,而不必通过子类化的方式。在上述的奇幻RPG游戏中,Decorator模式被用来实现武器的锻造过程,尤其是武器镶嵌宝石的功能。这个过程...
装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不改变对象接口的情况下,动态地为对象添加额外的职责或功能。装饰模式通常用于需要扩展对象功能而又不希望使用子类化的场景。 装饰模式的组成 组件接口...
装饰模式(Decorator)是软件设计领域中一种非常实用的结构型设计模式,它允许我们向一个对象添加新的行为或责任,而无需修改该对象的源代码。在C++编程语言中,装饰模式常用于动态地扩展类的功能,使得类的行为在...
Decorator模式,也称为装饰模式,是设计模式中的一个重要组成部分,它在不改变原有对象接口的前提下,动态地给对象添加新的功能,从而扩展了对象的能力。这篇博客()将深入探讨这个模式的细节。 装饰模式的核心...
装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许动态地给一个对象添加新的功能,而无需修改其原有代码。这个模式的核心思想是通过将对象封装在一个包装器(Decorator)中来扩展其行为,而包装器和原始...
装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...
《设计模式之Decorator》 设计模式是软件工程中的一种最佳实践,它是在特定场景下解决常见问题的经验总结。Decorator模式是一种结构型设计模式,它的主要作用是为对象添加额外的功能,而无需修改对象的源代码。...
总结来说,李建忠先生的“设计模式总结”涵盖了C#中广泛使用的设计模式,强调了它们在实际项目中的应用价值。理解并熟练运用这些模式,对于提升C#开发者的专业素养和项目质量具有重大意义。无论是初学者还是经验丰富...
"大话西游之设计模式_从猴王学艺看Decorator"这篇文章将设计模式的概念与经典电影《大话西游》中的故事相结合,以生动有趣的方式讲解了Decorator模式。猴王学艺的过程,就如同我们在编程中逐步增加对象的能力,通过...
装饰器模式(Decorator Pattern)是一种结构型设计模式,主要用于在运行时动态地给对象添加新的职责或行为,而不必改变现有对象的类定义。在面向对象编程中,装饰器模式提供了一种相对于继承更加灵活的方式来增强或...
在给定的标题“设计模式之装饰模式”中,我们可以深入探讨以下几个方面: 1. **装饰模式的基本结构**:装饰模式通常包括四个角色:抽象组件(Component)接口,具体组件(Concrete Component)类,抽象装饰...
总结来说,“设计模式 t07Decorator”着重介绍的是如何使用装饰者模式来动态地扩展对象的功能,它强调了面向对象设计中的灵活性和可扩展性,是软件开发中一个重要的设计原则和工具。通过理解和应用装饰者模式,我们...
装饰者模式是软件设计中的一种行为模式,它允许在运行时动态地给对象添加新的行为或职责,而无需改变对象的原始类。这种模式在不违反开闭原则的前提下,提供了扩展对象功能的能力,使得系统更加灵活,易于维护。 在...
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它允许在运行时给对象添加新的行为或职责,而无需改变对象的类。在Java中,装饰模式通常通过继承和组合来实现,使得代码具有更好的扩展性和灵活性。...
装饰器模式(Decorator)是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式属于结构型模式,是面向对象设计中的一种非常实用的技术。 装饰器模式的核心思想是通过将一个...