装饰者模式
2015-12-23 21:34
323 查看
1.应用场景
当一个主体A最多拥有n个部件并且每个部件都可没有时,如果用类来描述A及其部件,那最多可以用到2n个类,这时明显不合理。如果把所有部件放在一个类里则会造成这个类过于庞大,不易于维护。
2.解决方案
采用递归的思想,让主体A和其部件实现同一个接口,并且部件内包含实现接口。
3.实现代码
当一个主体A最多拥有n个部件并且每个部件都可没有时,如果用类来描述A及其部件,那最多可以用到2n个类,这时明显不合理。如果把所有部件放在一个类里则会造成这个类过于庞大,不易于维护。
2.解决方案
采用递归的思想,让主体A和其部件实现同一个接口,并且部件内包含实现接口。
3.实现代码
主体A和其部件都应该实现的接口 public interface TopInterface{ void execute(); String getDescription(); } 主体A public class A implements TopInterface{ public void execute(){ System.out.println("A is executing"); } public String getDescription(){ return "This is A"; } } 装饰者抽象类 public abstract Decorator extends TopInterface{ } 部件Aa public class Aa implements TopInterface{ private TopInterface t; //get,set public Aa(TopInterface t){ this.t = t; } public void execute(){ t.execute(); System.out.println("Aa is executing"); } public String getDescription(){ return t.getDescription() + "This is Aa"; } } 部件Ab public class Ab implements TopInterface{ private TopInterface t; //get,set public Ab(TopInterface t){ this.t = t; } public void execute(){ t.execute(); System.out.println("Ab is executing"); } public String getDescription(){ return t.getDescription() + "This is Ab"; } } 测试类 public class Test{ public static void main(String args[]){ A a = new A(); Aa aa = new Aa(a); Ab ab = new Ab(a); ab.execute(); System.out.println(ab.getDescription()); } }
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 深入浅出23种设计模式
- 浅谈c#设计模式之单一原则
- C#设计模式之观察者模式实例讲解
- C#设计模式之单例模式实例讲解
- 学习JavaScript设计模式(接口)
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- 面向对象设计模式的核心法则
- 设计模式之六大设计原则