认真学习设计模式之委派模式(Delegate Pattern)
委派模式不属于GOF23种设计模式, 主要角色有三种: 抽象任务角色, 委派者角色, 具体任务角色。
委派模式具体是指定义一个抽象接口, 它有若干实现类, 他们真正执行业务方法, 这些子类是具体任务角色。定义委派者角色也实现该接口, 但它负责在各个具体角色实例之间做出决策, 由它判断并调用具体实现的方法。联想到工作中就是leader将任务分派给小组长,小组长进行任务具体拆分到个人。
通常委派模式对外隐藏了具体实现, 仅将委派者角色暴露给外部。是不是立马想到了外观?如果委派者和具体的ConcreteTask也暴露出去可以吗?
我们可以看下示意图
也就是说Delegate与ConcreteTask是同一种类型,实现了同样的方法。在委派者处理任务时,会将具体任务动作分派给ConcreteTask。
我们来看下一种变异的委派模式-mybatis中的CachingExecutor
如下所示,CachingExecutor 的构造方法中拥有delegate对象(这里可以理解为执行工作任务的对象)。
public class CachingExecutor implements Executor {private final Executor delegate;private final TransactionalCacheManager tcm = new TransactionalCacheManager();public CachingExecutor(Executor delegate) {this.delegate = delegate;delegate.setExecutorWrapper(this);}
}
以update方法为例,如下所示,在进行必要的增强方法flushCacheIfRequired(ms);
后,将任务分配给了delegate调用其update方法。这里是不是又有装饰器的影子?
@Override
public int update(MappedStatement ms, Object parameterObject) throws SQLException {flushCacheIfRequired(ms);return delegate.update(ms, parameterObject);
}
那么delegate是什么呢?由构造函数传入。比如可以是SimpleExecutor也可以是BatchExecutor。所以这里delegate并没有限制死而是根据具体业务场景动态变化,是不是又有策略模式的影子了?
认真学习设计模式之委派模式(Delegate Pattern)相关推荐
- 【chromium】常用设计模式:委托模式(Delegate Pattern)、观察者模式、 工厂模式。
文章目录 对象行为型模式 观察者模式(Observer Pattern) 类创建型模式 工厂模式(Factory Pattern) Delegate 和 client 委托模式(Delegate Pa ...
- Linux下的设计模式——委派模式(Delegate Pattern)深入浅出【建议新手收藏】
前言:学习目标:精简程序逻辑,提升代码的可读性.内容定位:希望通过对委派模式的学习,让自己写出更加优雅的代码的人群. 一.委派模式定义 委派模式(Delegate Pattern)的基本作用是负责任务 ...
- 进阶学习之旅-设计模式之(委派模式策略模式)
文章目录 1.课程学习目标 2.内容定位 3.委派模式详解 3.1委派模式的定义 3.2 demo案例 3.2.1模拟Boss指派任务给Leader 由员工完成任务执行 3.2.2 模拟spring ...
- 如何让孩子爱上设计模式 ——11.外观模式(Facade Pattern)
如何让孩子爱上设计模式 --11.外观模式(Facade Pattern) 标签: 设计模式初涉 场景引入 相信各位玩过LOL英雄联盟游戏的童鞋,对下面两个英雄都不会陌生吧: 分别是瑞雯和 ...
- 乐在其中设计模式(C#) - 提供者模式(Provider Pattern)
原文:乐在其中设计模式(C#) - 提供者模式(Provider Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 提供者模式(Provider Pattern) 作者:web ...
- 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)
[索引页] [源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:webabcd 介绍 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. ...
- 一篇博客读懂设计模式之---委派模式
一篇博客读懂设计模式之-委派模式 委派模式可能大家听起来不太熟悉,但是在代码开发的时候却很好用,下面从几个方面来介绍一下 what:是什么? 委派模式:顾名思义,委托其他对象或者实例来帮我们完成任务, ...
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...
- java 访客模式,设计模式 - 访客模式( Visitor Pattern)
设计模式 - 访客模式( Visitor Pattern) 在Visitor模式中,我们使用一个访问者类来更改元素类的执行算法. 通过这种方式,元素的执行算法可以随着访问者的变化而变化. 此模式属于行 ...
最新文章
- 最适合你性格的职业类型是什么?
- 全球及中国台式破壁机行业销售模式及市场需求份额调研报告2021-2027年
- 【Hibernate】Hibernate实体关系映射实例解析
- python基础(part14)--异常处理
- (九)python3 只需3小时带你轻松入门——函数自定义
- 道理我都懂,但你到底为什么偏偏喜欢咬我??
- css怎样定义div大小,css如何设置div大小
- 笨方法“学习python笔记之列表
- Git Pull Failed:Could not read from remote repository
- 车标&车辆品牌检测Python[完整源码&视频安装教程&车标数据集&完整文档]
- proteus仿真微型计算机,微机原理与接口技术——基于8086和Proteus仿真(第3版)...
- IBM:金融的话语权仍掌握在银行手中
- 批量将多个 Excel 工作簿文件拆分成单个 Excel 工作簿文件
- 谈《西游记》和泛项目
- 解决关于VS无法加载解决方案中的项目的问题
- 为了庆祝五一国际劳动节的到来
- html日期控件默认设置为当天日期
- ios APP 制作流程
- [week15] C - ZJM与纸条(选做)—— KMP算法
- 自然语言处理顶会 NAACL 2018 最佳论文、时间检验论文揭晓