【一】模式定义

委托是对一个类的功能进行扩展和复用的方法。它的做法是:写一个附加的类提供附加的功能,并使用原来的类的实例提供原有的功能。

假设我们有一个 TeamLead 类,将其既定任务委托给一个关联辅助对象 JuniorDeveloper 来完成:本来 TeamLead 处理 writeCode 方法,Usage 调用 TeamLead 的该方法,但现在 TeamLead 将 writeCode 的实现委托给 JuniorDeveloper 的 writeBadCode 来实现,但 Usage 并没有感知在执行 writeBadCode 方法。

【二】UML类图

【三】示例代码

Usage.php

namespace DesignPatterns\More\Delegation;

// 初始化 TeamLead 并委托辅助者 JuniorDeveloper

$teamLead = new TeamLead(new JuniorDeveloper());

// TeamLead 将编写代码的任务委托给 JuniorDeveloper

echo $teamLead->writeCode();

TeamLead.php

namespace DesignPatterns\More\Delegation;

/**

* TeamLead类

* @package DesignPatterns\Delegation

* `TeamLead` 类将工作委托给 `JuniorDeveloper`

*/

class TeamLead

{

/** @var JuniorDeveloper */

protected $slave;

/**

* 在构造函数中注入初级开发者JuniorDeveloper

* @param JuniorDeveloper $junior

*/

public function __construct(JuniorDeveloper $junior)

{

$this->slave = $junior;

}

/**

* TeamLead 喝咖啡, JuniorDeveloper 工作

* @return mixed

*/

public function writeCode()

{

return $this->slave->writeBadCode();

}

}

JuniorDeveloper.php

namespace DesignPatterns\More\Delegation;

/**

* JuniorDeveloper 类

* @package DesignPatterns\Delegation

*/

class JuniorDeveloper

{

public function writeBadCode()

{

return "Some junior developer generated code...";

}

}

【四】测试代码

Tests/DelegationTest.php

namespace DesignPatterns\More\Delegation\Tests;

use DesignPatterns\More\Delegation;

/**

* DelegationTest 用于测试委托模式

*/

class DelegationTest extends \PHPUnit_Framework_TestCase

{

public function testHowTeamLeadWriteCode()

{

$junior = new Delegation\JuniorDeveloper();

$teamLead = new Delegation\TeamLead($junior);

$this->assertEquals($junior->writeBadCode(), $teamLead->writeCode());

}

}

php委托模式,PHP设计模式 - 委托模式相关推荐

  1. java filter 模式,Java设计模式----过滤器模式(挑三拣四)

    过滤器模式 描述 拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理.定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上.过 ...

  2. 代理模式 委派模式 策略模式_设计模式 - 委派模式

    理解 首先委派模式不属于23种设计模式. 所谓委派,个人理解是:将为达到最终结果的事情交给其他人或中间人来干,我只要最终结果,其他的事情,由我委派的人来安排. 更直白的表达就是,比如,我们想要盖一栋楼 ...

  3. 组合模式_Java设计模式-组合模式

    在现实生活中,存在很多"部分-整体"的关系,例如,大学中的部门与学院.总公司中的部门与分公司.学习用品中的书与书包.生活用品中的衣月艮与衣柜以及厨房中的锅碗瓢盆等.在软件开发中也是 ...

  4. java 行为模式_java设计模式--行为模式

    前言 行为模式是描述多个类与对象之间通过协作共同完成单个对象无法单独完成的任务. 行为模式分为: 类行为模式通过集成在类之间分派行为 对象行为模式通过组合或聚合在对象之间分配行为 行为模式: 模板方法 ...

  5. java模板方法模式_JAVA 设计模式 模板方法模式

    定义 模板方法模式 (Template Method) 定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成. 模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模 ...

  6. java原始模型模式_java设计模式--原始模型模式

    简介 原始模型模式属于对象的创建模式.通过一个原型对象来指明要创建对象的类型,然后用复制原型对象的方法来创建出更多同类型的对象. Java所有的类都是从java.lang.Object类继承来的,Ob ...

  7. python 设计模式 原型模式_python设计模式–原型模式

    套用书里的一个例子,两年前你写了一本书,现在你要在此书 的基础上修订一版,你会在新版本中加入一些最新的元素,但是与之前的书相比你有很多的地方其实是不用修改的,但是你又不想直接把上一版拿过来改,万一改的 ...

  8. java 备忘录模式_java设计模式--备忘录模式

    备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象外保存这个状态,这样以后可将此对象恢复成原来的状态. 就拿单机游戏举例,玩游戏打boss前我们通常都会存档,避免打boss时失误死 ...

  9. .NET反射、委托技术与设计模式

    转自:http://hi.baidu.com/nanashitou/blog/item/ad7346eed769ffffb2fb958a.html 1 反射技术与设计模式         反射(Ref ...

最新文章

  1. SpringBoot笔记:SpringBoot启动参数配置
  2. docker run指定entrypiont
  3. 经典的JAVA面试题
  4. GUI实战|Python做一个文档图片提取软件
  5. 哈尔滨工业大学计算机培养计划,哈工大计算机科学与技术专业本科生培养方案.docx...
  6. javascript --- Object.assign()浅复制解决方法
  7. python 哈希表_数据结构-7 哈希表
  8. PostMan Pre-request Script 生成api签名
  9. 3ds max 2020 vray 5.0 渲染设置
  10. 工业AGV(含AMR)工程师要求汇总220331
  11. windows批量ping测试脚本
  12. 阳春三月,再送32本书,快来快来!
  13. oracle 卸载清除,Oracle终极彻底卸载的完整步骤
  14. 菜鸟的数学建模之路(三):线性与非线性拟合
  15. 微信公众号实现微信支付(含前后端完整代码)
  16. SAP中汇率固定配置和应用分析测试
  17. 什么牌子的护眼灯对眼睛好?性价比最高的护眼灯
  18. 支付宝转账系统后台或API接口,避坑
  19. CIC 滤波器——不同长度的单级CIC滤波器的频谱特性
  20. clickhouse 生产集群部署之坑坑洼洼(三)

热门文章

  1. Android 的 ramdisk.img、system.img、userdata.img 作用说明,以及UBoot 系统启动过程
  2. WinCE 应用程序开机自动方法
  3. mysql web备份软件_Windows下实现MySQL自动备份的批处理(复制目录或mysqldump备份)
  4. 熊猫烧香源代码(转载)
  5. 云栖科技评论NO.2 | 张学友演唱会逃犯集中落网,真正的“神捕”其实是AI
  6. HtmlAgilityPack 抓取页面的乱码处理
  7. mysql binlog_format 三种格式 详解 ---摘抄
  8. GContracts1.1.0支持前置/后置条件的继承
  9. 《那些年啊,那些事——一个程序员的奋斗史15》
  10. 论文阅读:Joint Discriminative and Generative Learning for Person Re-identification