委派模式不属于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)相关推荐

  1. 【chromium】常用设计模式:委托模式(Delegate Pattern)、观察者模式、 工厂模式。

    文章目录 对象行为型模式 观察者模式(Observer Pattern) 类创建型模式 工厂模式(Factory Pattern) Delegate 和 client 委托模式(Delegate Pa ...

  2. Linux下的设计模式——委派模式(Delegate Pattern)深入浅出【建议新手收藏】

    前言:学习目标:精简程序逻辑,提升代码的可读性.内容定位:希望通过对委派模式的学习,让自己写出更加优雅的代码的人群. 一.委派模式定义 委派模式(Delegate Pattern)的基本作用是负责任务 ...

  3. 进阶学习之旅-设计模式之(委派模式策略模式)

    文章目录 1.课程学习目标 2.内容定位 3.委派模式详解 3.1委派模式的定义 3.2 demo案例 3.2.1模拟Boss指派任务给Leader 由员工完成任务执行 3.2.2 模拟spring ...

  4. 如何让孩子爱上设计模式 ——11.外观模式(Facade Pattern)

    如何让孩子爱上设计模式 --11.外观模式(Facade Pattern) 标签: 设计模式初涉 场景引入 相信各位玩过LOL英雄联盟游戏的童鞋,对下面两个英雄都不会陌生吧:       分别是瑞雯和 ...

  5. 乐在其中设计模式(C#) - 提供者模式(Provider Pattern)

    原文:乐在其中设计模式(C#) - 提供者模式(Provider Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 提供者模式(Provider Pattern) 作者:web ...

  6. 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:webabcd 介绍 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. ...

  7. 一篇博客读懂设计模式之---委派模式

    一篇博客读懂设计模式之-委派模式 委派模式可能大家听起来不太熟悉,但是在代码开发的时候却很好用,下面从几个方面来介绍一下 what:是什么? 委派模式:顾名思义,委托其他对象或者实例来帮我们完成任务, ...

  8. 乐在其中设计模式(C#) - 命令模式(Command Pattern)

    原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...

  9. java 访客模式,设计模式 - 访客模式( Visitor Pattern)

    设计模式 - 访客模式( Visitor Pattern) 在Visitor模式中,我们使用一个访问者类来更改元素类的执行算法. 通过这种方式,元素的执行算法可以随着访问者的变化而变化. 此模式属于行 ...

最新文章

  1. 最适合你性格的职业类型是什么?
  2. 全球及中国台式破壁机行业销售模式及市场需求份额调研报告2021-2027年
  3. 【Hibernate】Hibernate实体关系映射实例解析
  4. python基础(part14)--异常处理
  5. (九)python3 只需3小时带你轻松入门——函数自定义
  6. 道理我都懂,但你到底为什么偏偏喜欢咬我??
  7. css怎样定义div大小,css如何设置div大小
  8. 笨方法“学习python笔记之列表
  9. Git Pull Failed:Could not read from remote repository
  10. 车标&车辆品牌检测Python[完整源码&视频安装教程&车标数据集&完整文档]
  11. proteus仿真微型计算机,微机原理与接口技术——基于8086和Proteus仿真(第3版)...
  12. IBM:金融的话语权仍掌握在银行手中
  13. 批量将多个 Excel 工作簿文件拆分成单个 Excel 工作簿文件
  14. 谈《西游记》和泛项目
  15. 解决关于VS无法加载解决方案中的项目的问题
  16. 为了庆祝五一国际劳动节的到来
  17. html日期控件默认设置为当天日期
  18. ios APP 制作流程
  19. [week15] C - ZJM与纸条(选做)—— KMP算法
  20. 自然语言处理顶会 NAACL 2018 最佳论文、时间检验论文揭晓

热门文章

  1. 硬盘结构,主引导记录MBR,硬盘分区表DPT,主分区、扩展分区和逻辑分区
  2. 使用matlab对一维矩阵的数据进行滤波
  3. PLC与Unity通讯☀️ 一、目标及术语解释
  4. matlab绘制二维曲线图
  5. 局域网内,如何使用命令行关闭别人的电脑
  6. 阿语python美多商城-商品-购物车管理之第7.3节展示商品页面简单购物车
  7. Android--BroadcastReceiver
  8. France beat Croatia 4-2 in World Cup final
  9. 【GCC编译优化系列】究竟什么样的代码会导致函数调用的栈溢出呢?
  10. linux系统weblogic安装及简单使用