概述

装饰模式是对客户端以透明的方式扩展对象的功能,是继承关系的一个替代方案。也就是说,客户端并不会觉得对象在装饰前和装饰后有什么不同,装饰模式可以在不用创造更多子类的情况下,将对象的功能加以扩展,装饰模式的关键在于这种扩展是完全透明的。

模式的结构

UML类图:

装饰模式中的类角色:

抽象构件角色(Project):给出一个接口,以规范准备接收附加责任的对象

具体构件角色(Employe):定义一个将要接收附加责任的类

装饰角色(Manager):持有一个构件对象的实例,并定义一个与抽象构件接口一致的接口

具体装饰角色(ManagerA,ManagerB):负责给构件对象“贴上”附加的责任

代码示例

package interview;

interface Project{

void doCoding();

}

class Employe implements Project{

@Override

public void doCoding() {

System.out.println("工程师在编程......");

}

}

class Manager implements Project{

private Project project;

public Manager(Project project){

this.project = project;

}

@Override

public void doCoding() {

startNewWork();

project.doCoding();

}

public void startNewWork(){}

}

class ManagerA extends Manager{

public ManagerA(Project project) {

super(project);

}

@Override

public void startNewWork() {

System.out.println("开发经理开始新的工作计划");

}

}

class ManagerB extends Manager{

public ManagerB(Project project) {

super(project);

}

@Override

public void startNewWork() {

System.out.println("测试经理开始新的工作计划");

}

}

public class MainTest {

public static void main(String arg[]) {

Project project = new Employe();

Project managerA = new ManagerA(project);

Project managerB = new ManagerB(project);

managerA.doCoding();

managerB.doCoding();

}

}

装饰模式优缺点:

优点:

装饰模式与继承的目的都是要扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。装饰模式允许系统动态决定“贴上”一个需要的“装饰”,继承关系则不同,继承关系是静态的,它在系统运行前就决定了。

通过使用不同的具体装饰类以及这些装饰类的组合,设计师可以创造很多不同的行为组合。

缺点:

由于使用装饰模式,可以比使用继承关系需要较少数目的类。使用较少的类,当然使设计比较易于进行。但是,在另一方面,使用装饰模式会产生比使用继承关系更多的对象。更多的对象会使得差错变得困难,特别是这些对象看上去都很像。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java manager 模式_java设计模式之装饰器模式(Decorator)相关推荐

  1. python中的装饰器、装饰器模式_python 设计模式之装饰器模式 Decorator Pattern

    #写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...

  2. Java单体应用 - 架构模式 - 03.设计模式-10.装饰器模式

    原文地址:http://www.work100.net/training/monolithic-architecture-design-patterns-decorator-pattern.html ...

  3. 设计模式学习----装饰器模式

    这两天本来是自在学习java collection Framework的Fail Fast底层机制,看到核心的部分时,突然意识到设计模式的问题,上大学到现在我还没有真正理解过设计模式的概念,于是用了大 ...

  4. 【设计模式】装饰器模式的使用

    问题来源 我们在进行软件系统设计的时候,有一些业务(如下图,一些通用的非功能性需求)是多个模块都需要的,是跨越模块的.把它们放到什么地方呢? 最简单的办法就是把这些通用模块的接口写好,让程序员在实现业 ...

  5. go设计模式之装饰器模式

    go设计模式之装饰器模式 再写这篇文章时,我已经看了很多其他人发表的类似文章,大概看了这么多吧. 亓斌的设计模式-装饰者模式(Go语言描述) jeanphorn的Golang设计模式之装饰模式 七八月 ...

  6. python 设计模式之装饰器模式 Decorator Pattern

    #写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...

  7. 设计模式之装饰器模式(C++)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一.装饰器模式是什么? 装饰器模式是一种结构型的软件设计模式,在不改变原类文件或使用继承的前提下 ...

  8. 零基础学习设计模式之装饰器模式(配套视频)

    零基础学习设计模式之装饰器模式 定义 在不改变目标结构的情况下,动态的给对象增加功能 举例 如房子装修.相片加相框等,都是装饰器模式. 基本组件 抽象构件(Component)角色:定义一个抽象接口以 ...

  9. 详解设计模式:装饰器模式

    装饰器模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),是 GoF 的 23 种设计模式中的一种结构型设计模式.装饰器模式 是指在不改变原有对象的基础之上,将 ...

  10. javascript设计模式之装饰器模式(结构型模式)

    javascript设计模式之装饰器模式 js的设计模式分为创建型模式,结构型模式和行为模式 结构模式描述了如何组合对象以提供新的功能. 装饰器模式是一种常见的结构型模式,我们可以以一个基础对象为基础 ...

最新文章

  1. 高并发BUG排查,警惕高权限又不受监管的运维行为
  2. 关于cookie 跨页面处理
  3. SAP S/4HANA 的30天免费试用版
  4. React中添加class——借助第三方库classnames
  5. 【LeetCode笔记】461. 汉明距离(Java、位运算)
  6. oracle报28003,【翻译自mos文章】运行utlpwdmg.sql之后报ORA-28003, ORA-20001, ORA-20002, ORA-20003, ORA-20004 错误...
  7. 成年人不懂这些道理,会吃很多亏
  8. C语言及程序设计进阶例程-12 结构体成员的引用
  9. [Cocoa]深入浅出Cocoa之Bonjour网络编程
  10. git ssh配置完后拉取代码_二、windows下使用git拉取github上的项目(通过设置ssh key方式)...
  11. 5.文件操作 --- 系统调用
  12. Python深度学习---第1章 什么是深度学习
  13. python出入库_python出入库_基于Python对Excel数据入库的处理
  14. 在Excel中如何让文字竖排
  15. c语言编写闹钟主程序流程图,基于STC15W4K58S4单片机的电子万年历设计源码与报告(数码管显示)...
  16. 碧蓝航线经济系统的流程图
  17. 百度飞桨(Python+AI)入门
  18. 为什么路由器服务器无响应怎么回事啊,路由器服务器无响应怎么办
  19. php 商品多规格的实现,sku实现
  20. 工业互联网与制造控制生产网络学习总结

热门文章

  1. 四因素三水平正交试验表_正交实验设计过程
  2. python车牌识别系统开源代码_python实现车牌识别的示例代码
  3. vue-awesome-swiper:依赖于6.X版本Swiper时autoplay自动播放设置无效
  4. HighCharts:图表默认的英文日期改为中文显示
  5. linux硬盘格式哪个好,linux使用哪种硬盘分区格式会比较好
  6. java关联查询实战_MyBatis初级实战之六:一对多关联查询
  7. Deep Graph Library消息传递机制-Message Passing详解
  8. python数据分析之(6)简单绘图matplotlib.pyplot
  9. 如何正确地逛Github?
  10. 添加SAP_ALL权限