装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类这种方式并不可取。在面向对象的设计中,而我们也应该尽量使用对象组合,而不是对象继承来扩展和复用功能。装饰器模式就是基于对象组合的方式,可以很灵活的给对象添加所需要的功能。装饰器模式的本质就是动态组合。动态是手段,组合才是目的。总之,装饰模式是通过把复杂的功能简单化,分散化,然后再运行期间,根据需要来动态组合的这样一个模式。
来段代码看看吧
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>
相关推荐
设计模式_源代码大全.zip 包括:1.简单工厂模式 2.策略模式 3.装饰模式 4.代理模式 5.工厂方法模式 6.原型模式 7.模板方法模型 8.外观模式 9.建造者模式 10.观察者模式 11.抽象工厂模式 12.状态模式 13.适配器模式 ...
java设计模式之装饰者模式代码
设计模式 c# 装饰模式
软件设计模式之装饰模式讲解ppt,可用于教学课件。
54-Spring设计模式之装饰器模式1
29.设计模式之装饰者模式 30.设计模式之外观模式 31.设计模式之代理模式 32.设计模式之观察者模式 33.设计模式之策略模式 34.设计模式之命令模式 35.设计模式之迭代器模式 36.设计模式之中介者模式 37.设计模式之享...
C++23种设计模式之 装饰模式。:当你向旧的类中添加新代码时,一般是为了添加核心职责或主要行为。而当需 要加入的仅仅是一些特定情况下才会执行的特定的功能时(简单点就是不是核心应用的功 能),就会增加类的...
JAVA设计模式之装饰模式代码
文件类型为PDF文件,此文档对20多种java设计模式进行了详细讲解,在中文讲解的过程中还附有代码示例给学习者进行参考,使学习者通过实践更容易理解设计模式的原理。 本文档目录: 1.工厂模式 2.单例模式 3.建造...
设计模式--装饰者模式java例子
1.不改变原有对象的情况下给一个对象扩展功能 2.使用不同的组合可以实现不同的效果 3.符合开闭原则
设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:...
1 欢迎来到设计模式世界:设计模式入门 模拟鸭子应用 Joe想到继承 利用接口如何? 软件开发的不变真理 分开变化和不变部分 设计鸭子的行为 测试鸭子的代码 动态地设置行为 封装行为的大局观 ...
java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式java设计模式之装饰模式
装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令...
Qt设计模式之装饰者模式
C#设计模式之Decorator 装饰模式,pdf+视频教学,实例演示,易学易用~~
装饰者模式是在不改变原有类和不使用继承的情况下,动态地扩展一个对象的功能,代码中通过对象参数进行选择。
设计模式 - 装饰者模式
设计模式专题之(七)装饰模式---设计模式装饰模式示例代码(python--c++)