装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类这种方式并不可取。在面向对象的设计中,而我们也应该尽量使用对象组合,而不是对象继承来扩展和复用功能。装饰器模式就是基于对象组合的方式,可以很灵活的给对象添加所需要的功能。装饰器模式的本质就是动态组合。动态是手段,组合才是目的。总之,装饰模式是通过把复杂的功能简单化,分散化,然后再运行期间,根据需要来动态组合的这样一个模式。
来段代码看看吧
1. 组件接口
package designpattern.decorator; /** * 组件接口 * * @author king */ public abstract class Component { //接口中的方法 abstract void operation(); }
2.组件的实现类
/** * 组件的实现类 * * 被装饰的类 * * @author king * */ public class ComponentImpl extends Component{ //组件中运行的方法 @Override public void operation() { System.out.println("组件正在运转"); } }
3.抽象装饰器类
/** * * 抽象装饰器类 * * @author king * */ public abstract class AbstractDecorator extends Component { protected Component component; public AbstractDecorator(Component component){ this.component = component; } @Override void operation(){ component.operation();//调用组件的一些方法 } }
4. 装饰器的具体实现类
/** * 装饰器的具体实现类 * * @author king * */ public class ConcreteDecorator extends AbstractDecorator { public ConcreteDecorator(Component component) { super(component); } @Override //被增强的方法 void operation() { System.out.println("执行组件之前....."); super.operation(); System.out.println("执行组件之后....."); } }
5. 运行类
public class Main { public static void main(String[] args) { //实例 化一个组件 Component component = new ComponentImpl(); //对组件中用到的方法进行曾强 AbstractDecorator componentAdvise = new ConcreteDecorator(component); //调用增强后的方法 componentAdvise.operation(); } }
运行结果
执行组件之前.....
组件正在运转
执行组件之后.....
想到什么? Aop 对不对,是不是。
待续<aop的JVM 和 cglib 实现>
参考文档 <http://blog.csdn.net/hust_is_lcd/article/details/7884320>
相关推荐
【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种...
装饰器模式(Decorator Pattern)是一种结构型设计模式,它的核心思想是在不修改原有对象的前提下,通过包装(包裹)原对象并扩展其行为来增加功能。这种模式常用于在运行时动态地给对象添加新的职责,使得系统具有...
Spring 设计模式之装饰器模式详解 在软件设计中,经常会遇到需要在不修改原有代码的情况下,添加新的功能或行为。这时,装饰器模式便可以发挥其作用。在 Spring 设计模式中,装饰器模式是非常重要的一种设计模式。 ...
在Java编程领域,设计模式是一种解决常见问题的模板或最佳实践,它被广泛应用于构建可扩展、可维护的软件系统。在这个"薪资交付系统"的大作业中,我们可以预期会涉及多种设计模式,这些模式将帮助我们高效地组织代码...
《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...
设计模式_源代码大全.zip 包括:1.简单工厂模式 2.策略模式 3.装饰模式 4.代理模式 5.工厂方法模式 6.原型模式 7.模板方法模型 8.外观模式 9.建造者模式 10.观察者模式 11.抽象工厂模式 12.状态模式 13.适配器模式 ...
在给定的标题“设计模式之装饰模式”中,我们可以深入探讨以下几个方面: 1. **装饰模式的基本结构**:装饰模式通常包括四个角色:抽象组件(Component)接口,具体组件(Concrete Component)类,抽象装饰...
总的来说,装饰者模式是一种强大的设计模式,它提供了一种在运行时动态调整对象行为的方法,使得代码更具灵活性和可扩展性。通过理解和熟练运用装饰者模式,我们可以更好地应对软件需求的变化,提高代码的可维护性和...
装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...
软件设计模式之装饰模式讲解ppt,可用于教学课件。
设计模式之装饰模式 装饰模式(Decorator Pattern)是一种结构型设计模式,用于动态地给一个对象添加一些额外的职责。该模式允许在不修改原有对象的情况下,动态地改变对象的行为。 定义与结构 装饰模式由四个...
在"C#面向对象设计模式纵横谈(10):(结构型模式) Decorator 装饰模式.pdf"中,你可能会学习到如何定义这些角色以及它们之间的关系。装饰模式的代码结构清晰,易于理解和实现。通过阅读文档,你可以理解如何在C#中...
单体模式是JavaScript中最基本的设计模式之一。它的主要作用是提供一个命名空间,减少全局变量的数量,避免代码冲突,并组织代码使其易于维护。单体模式可以用来划分命名空间,组织代码和避免代码冲突。 2. 工厂...
资源中包含的"23种设计模式.jpg"可能是设计模式的图表或总结,可以帮助理解和记忆各种模式。而"python爬虫js加密解密系列文章合集-云栖社区-阿里云.url"可能是一个链接,指向有关Python爬虫中使用设计模式解决JS加密...
装饰者模式是面向对象设计模式的一种,主要用于动态地给一个对象添加一些额外的职责,而不会改变该对象的类。这种模式允许我们独立于对象的类来扩展对象的功能,为对象提供新的行为,同时保持了代码的可读性和可维护...
29.设计模式之装饰者模式 30.设计模式之外观模式 31.设计模式之代理模式 32.设计模式之观察者模式 33.设计模式之策略模式 34.设计模式之命令模式 35.设计模式之迭代器模式 36.设计模式之中介者模式 37.设计模式之享...
C++23种设计模式之 装饰模式。:当你向旧的类中添加新代码时,一般是为了添加核心职责或主要行为。而当需 要加入的仅仅是一些特定情况下才会执行的特定的功能时(简单点就是不是核心应用的功 能),就会增加类的...
装饰模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式在软件工程中非常常见,因为它提供了灵活性,使得我们可以独立于对象的组合来扩展功能。 在C++中,装饰...