装饰器模式
来源:互联网 发布:淘宝网首页翡翠吊坠 编辑:程序博客网 时间:2024/06/06 14:11
意图:动态的将责任附加到对象上
什么时候使用:
1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责
2.处理那些可以撤销的职责
3.当不能采用生成子类的方式进行扩充时
结构图:
示例代码:
1 package com.test.patten.decorator;2 3 public interface Person {4 void doCoding();5 }
package com.test.patten.decorator;public class Employee implements Person { @Override public void doCoding() { System.out.println("程序员加班写程序啊,写程序,终于写完了。。。"); }}
package com.test.patten.decorator;public abstract class Manager implements Person{ //装饰器增加功能 public abstract void doCoding();}
package com.test.patten.decorator;public class ManagerA extends Manager { private Person person;//给雇员升职 public ManagerA(Person person) { super(); this.person = person; } @Override public void doCoding() { doEarlyWork(); person.doCoding(); } /** * 项目经理开始前期准备工作 */ public void doEarlyWork() { System.out.println("项目经理A做需求分析"); System.out.println("项目经理A做架构设计"); System.out.println("项目经理A做详细设计"); }}
package com.test.patten.decorator;public class ManagerB extends Manager { private Person person;//给雇员升职 public ManagerB(Person person) { super(); this.person = person; } @Override public void doCoding() { person.doCoding(); doEndWork(); } /** * 项目经理开始项目收尾工作 */ public void doEndWork() { System.out.println("项目经理B 在做收尾工作"); } }
package com.test.patten.decorator;public class Client { public static void main(String args[]){ Person employee = new Employee(); employee = new ManagerA(employee);//赋予程序猿项目经理A职责 employee = new ManagerB(employee);//赋予程序猿项目经理B职责 employee.doCoding(); }}
项目经理A做需求分析
项目经理A做架构设计
项目经理A做详细设计
程序员加班写程序啊,写程序,终于写完了。。。
项目经理B 在做收尾工作
实际应用中的例子:java i/o
应用到的设计原则:对扩展开放,对修改关闭
优缺点:
1.装饰者类反应出被装饰的组件类型
2.装饰者类可以在被装饰者的行为前面或后面加上自己的行为,甚至取代被装饰者的行为,达到特定的目的
3.可以用无数个装饰者包装一个组件,装饰者类会导致设计中出现许多小对象,过度使用会让程序变的复杂
4.装饰者一般对组件的客户是透明的,除非客户程序依赖于组件的具体类型
-----------------------------------------------转载至:http://www.cnblogs.com/ikuman/archive/2013/01/29/2877913.htm-------------------------------------------------------
0 0
- c++装饰器模式
- 装饰器模式
- 装饰器模式
- 装饰器(Decorator)模式
- 装饰器模式
- 装饰器模式
- 装饰器模式
- 装饰器模式
- 装饰器模式
- 装饰器模式
- 装饰器(Decorator)模式
- 浅谈装饰器模式
- java 装饰器模式
- 装饰器(Decorator)模式
- 装饰器模式
- 装饰器(Decorator)模式
- 装饰器模式
- 装饰器模式
- Linux下如何测试及使用USB转串口线
- 【递推】【水题】【cogs1003】【cnoier]】斐波那契数
- 第三周项目5.2 动态数组做数据成员
- crtmpserver与red5 时间戳
- sql语句整理
- 装饰器模式
- 赶集网mysql开发36军规
- 第四周项目零:程序阅读——构造函数和析构函数(4)
- Dcef3与Flash有关的两个问题以及解决方式
- 驱动模型——类
- 第三周 项目5-数组做数据成员(2)
- 开发传感器应用的步骤
- java集合详细解释和线性安全
- PagerAdapter的几个方法