【设计模式】—-(8)装饰模式(结构型)
来源:互联网 发布:电路设计仿真软件 编辑:程序博客网 时间:2024/05/22 18:17
意图:动态的将责任附加到对象上
什么时候使用:
1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责
2.处理那些可以撤销的职责
3.当不能采用生成子类的方式进行扩充时
结构图:
示例代码:
1 package com.test.patten.decorator;2 3 public interface Person {4 void doCoding();5 }
1 package com.test.patten.decorator; 2 3 public class Employee implements Person { 4 5 @Override 6 public void doCoding() { 7 System.out.println("程序员加班写程序啊,写程序,终于写完了。。。"); 8 } 9 10 }
1 package com.test.patten.decorator;2 3 public abstract class Manager implements Person{4 5 //装饰器增加功能6 public abstract void doCoding();7 8 }
1 package com.test.patten.decorator; 2 3 public class ManagerA extends Manager { 4 private Person person;//给雇员升职 5 6 public ManagerA(Person person) { 7 super(); 8 this.person = person; 9 }10 @Override11 public void doCoding() {12 doEarlyWork();13 person.doCoding(); 14 }15 /**16 * 项目经理开始前期准备工作17 */18 public void doEarlyWork() {19 System.out.println("项目经理A做需求分析");20 System.out.println("项目经理A做架构设计");21 System.out.println("项目经理A做详细设计"); 22 }23 }
1 package com.test.patten.decorator; 2 3 public class ManagerB extends Manager { 4 private Person person;//给雇员升职 5 6 public ManagerB(Person person) { 7 super(); 8 this.person = person; 9 }10 @Override11 public void doCoding() {12 person.doCoding();13 doEndWork();14 }15 /**16 * 项目经理开始项目收尾工作17 */18 public void doEndWork() {19 System.out.println("项目经理B 在做收尾工作");20 }21 22 }
测试一下:
1 package com.test.patten.decorator; 2 3 public class Client { 4 public static void main(String args[]){ 5 Person employee = new Employee(); 6 employee = new ManagerA(employee);//赋予程序猿项目经理A职责 7 employee = new ManagerB(employee);//赋予程序猿项目经理B职责 8 9 employee.doCoding();10 }11 }
项目经理A做需求分析
项目经理A做架构设计
项目经理A做详细设计
程序员加班写程序啊,写程序,终于写完了。。。
项目经理B 在做收尾工作
实际应用中的例子:java i/o
应用到的设计原则:对扩展开放,对修改关闭
优缺点:
1.装饰者类反应出被装饰的组件类型
2.装饰者类可以在被装饰者的行为前面或后面加上自己的行为,甚至取代被装饰者的行为,达到特定的目的
3.可以用无数个装饰者包装一个组件,装饰者类会导致设计中出现许多小对象,过度使用会让程序变的复杂
4.装饰者一般对组件的客户是透明的,除非客户程序依赖于组件的具体类型
4 0
- 【设计模式】—-(8)装饰模式(结构型)
- (8)设计模式之装饰模式(结构型模式)
- Decorator装饰设计模式(结构型)
- 设计模式(3)-结构型-装饰模式(Decorator)
- 设计模式笔记(10)---装饰模式(结构型)
- 装饰模式decorator(结构型设计模式)
- java设计模式(结构型)之装饰模式
- 设计模式--装饰器模式Decorator(结构型)
- 结构型:设计模式之装饰模式(十一)
- 设计模式-结构型-装饰模式(Decorator)
- Java设计模式(7)结构型:装饰模式
- 设计模式之结构型-装饰模式(7)
- 设计模式(9)装饰模式--结构型
- 设计模式学习(结构型模式)—装饰模式(Decorator)
- java设计模式——结构型模式专题(一)装饰模式
- 设计模式——装饰者模式(结构型模式)
- 设计模式 - 结构型模式 - 装饰模式
- 结构型设计模式(一)(适配器模式,桥接模式,组合模式,装饰模式)
- 大数据开发工程师岗位分析
- 鸿观特辑:潜流2017笔记
- 由自动装箱和拆箱引发我看Integer源码
- SSH框架搭建和整合(struts2、spring4、hibernate5)
- 第5章 深入理解Android输入系统(节选)
- 【设计模式】—-(8)装饰模式(结构型)
- 蓝桥杯-基础练习 查找整数
- React实战-Js中容易被错用的不变数据
- 字符串数字转换成对应的数值
- 《html》
- NOWL #49
- 【POJ 1456 Supermarket】
- vim改装IDE开发环境
- Java File遍历文件夹