java manager 模式_java设计模式之装饰器模式(Decorator)
概述
装饰模式是对客户端以透明的方式扩展对象的功能,是继承关系的一个替代方案。也就是说,客户端并不会觉得对象在装饰前和装饰后有什么不同,装饰模式可以在不用创造更多子类的情况下,将对象的功能加以扩展,装饰模式的关键在于这种扩展是完全透明的。
模式的结构
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)相关推荐
- python中的装饰器、装饰器模式_python 设计模式之装饰器模式 Decorator Pattern
#写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...
- Java单体应用 - 架构模式 - 03.设计模式-10.装饰器模式
原文地址:http://www.work100.net/training/monolithic-architecture-design-patterns-decorator-pattern.html ...
- 设计模式学习----装饰器模式
这两天本来是自在学习java collection Framework的Fail Fast底层机制,看到核心的部分时,突然意识到设计模式的问题,上大学到现在我还没有真正理解过设计模式的概念,于是用了大 ...
- 【设计模式】装饰器模式的使用
问题来源 我们在进行软件系统设计的时候,有一些业务(如下图,一些通用的非功能性需求)是多个模块都需要的,是跨越模块的.把它们放到什么地方呢? 最简单的办法就是把这些通用模块的接口写好,让程序员在实现业 ...
- go设计模式之装饰器模式
go设计模式之装饰器模式 再写这篇文章时,我已经看了很多其他人发表的类似文章,大概看了这么多吧. 亓斌的设计模式-装饰者模式(Go语言描述) jeanphorn的Golang设计模式之装饰模式 七八月 ...
- python 设计模式之装饰器模式 Decorator Pattern
#写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...
- 设计模式之装饰器模式(C++)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一.装饰器模式是什么? 装饰器模式是一种结构型的软件设计模式,在不改变原类文件或使用继承的前提下 ...
- 零基础学习设计模式之装饰器模式(配套视频)
零基础学习设计模式之装饰器模式 定义 在不改变目标结构的情况下,动态的给对象增加功能 举例 如房子装修.相片加相框等,都是装饰器模式. 基本组件 抽象构件(Component)角色:定义一个抽象接口以 ...
- 详解设计模式:装饰器模式
装饰器模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),是 GoF 的 23 种设计模式中的一种结构型设计模式.装饰器模式 是指在不改变原有对象的基础之上,将 ...
- javascript设计模式之装饰器模式(结构型模式)
javascript设计模式之装饰器模式 js的设计模式分为创建型模式,结构型模式和行为模式 结构模式描述了如何组合对象以提供新的功能. 装饰器模式是一种常见的结构型模式,我们可以以一个基础对象为基础 ...
最新文章
- 高并发BUG排查,警惕高权限又不受监管的运维行为
- 关于cookie 跨页面处理
- SAP S/4HANA 的30天免费试用版
- React中添加class——借助第三方库classnames
- 【LeetCode笔记】461. 汉明距离(Java、位运算)
- oracle报28003,【翻译自mos文章】运行utlpwdmg.sql之后报ORA-28003, ORA-20001, ORA-20002, ORA-20003, ORA-20004 错误...
- 成年人不懂这些道理,会吃很多亏
- C语言及程序设计进阶例程-12 结构体成员的引用
- [Cocoa]深入浅出Cocoa之Bonjour网络编程
- git ssh配置完后拉取代码_二、windows下使用git拉取github上的项目(通过设置ssh key方式)...
- 5.文件操作 --- 系统调用
- Python深度学习---第1章 什么是深度学习
- python出入库_python出入库_基于Python对Excel数据入库的处理
- 在Excel中如何让文字竖排
- c语言编写闹钟主程序流程图,基于STC15W4K58S4单片机的电子万年历设计源码与报告(数码管显示)...
- 碧蓝航线经济系统的流程图
- 百度飞桨(Python+AI)入门
- 为什么路由器服务器无响应怎么回事啊,路由器服务器无响应怎么办
- php 商品多规格的实现,sku实现
- 工业互联网与制造控制生产网络学习总结
热门文章
- 四因素三水平正交试验表_正交实验设计过程
- python车牌识别系统开源代码_python实现车牌识别的示例代码
- vue-awesome-swiper:依赖于6.X版本Swiper时autoplay自动播放设置无效
- HighCharts:图表默认的英文日期改为中文显示
- linux硬盘格式哪个好,linux使用哪种硬盘分区格式会比较好
- java关联查询实战_MyBatis初级实战之六:一对多关联查询
- Deep Graph Library消息传递机制-Message Passing详解
- python数据分析之(6)简单绘图matplotlib.pyplot
- 如何正确地逛Github?
- 添加SAP_ALL权限