• 委托模式

通过分配或委托其他对象,委托设计模式能够去除核心对象中的判决和复杂的功能性。

  • 应用场景
  1. 设计了一个cd类,类中有mp3播放模式,和mp4播放模式
  2. 改进前,使用cd类的播放模式,需要在实例化的类中去判断选择什么方式的播放模式
  3. 改进后,播放模式当做一个参数传入playList函数中,就自动能找到对应需要播放的方法。
  • 代码:cd类,未改进之前,选择播放模式是一种痛苦的事情
    <?php
//委托模式-去除核心对象中的判决和复杂的功能性
//使用委托模式之前,调用cd类,选择cd播放模式是复杂的选择过程
class cd {
protected $cdInfo = array(); public function addSong($song) {
$this->cdInfo[$song] = $song;
} public function playMp3($song) {
return $this->cdInfo[$song] . '.mp3';
} public function playMp4($song) {
return $this->cdInfo[$song] . '.mp4';
}
}
$oldCd = new cd;
$oldCd->addSong("1");
$oldCd->addSong("2");
$oldCd->addSong("3");
$type = 'mp3';
if ($type == 'mp3') {
$oldCd->playMp3();
} else {
$oldCd->playMp4();
}

代码:通过委托模式,改进后的cd类

    <?php
//委托模式-去除核心对象中的判决和复杂的功能性
//改进cd类
class cdDelegate {
protected $cdInfo = array(); public function addSong($song) {
$this->cdInfo[$song] = $song;
} public function play($type, $song) {
$obj = new $type;
return $obj->playList($this->cdInfo, $song);
}
} class mp3 {
public function playList($list) {
return $list[$song];
}
} class mp4 {
public function playList($list) {
return $list[$song];
}
} $newCd = new cd;
$newCd->addSong("1");
$newCd->addSong("2");
$newCd->addSong("3");
$type = 'mp3';
$oldCd->play('mp3', '1'); //只要传递参数就能知道需要选择何种播放模式

转自:http://blog.csdn.net/initphp/article/details/7684476

PHP设计模式系列 - 委托模式的更多相关文章

  1. iOS中常见的设计模式——单例模式\委托模式\观察者模式\MVC模式

    一.单例模式 1. 什么是单例模式? 在iOS应用的生命周期中,某个类只有一个实例. 2. 单例模式解决了什么问题? 想象一下,如果我们要读取文件配置信息,那么每次要读取,我们就要创建一个文件实例,然 ...

  2. PHP设计模式之委托模式

    委托模式: 通过分配或委托至其他对象,委托设计模式能够去除核心对象中的判决和复杂的功能性. class Bank{ protected $info; /* 设置基本信息 @param string $ ...

  3. IOS常用设计模式之委托模式

    对于iOS开发,举例Cocoa框架下的几个设计模式为大家分析.当然,Cocoa框架下关于设计模式的内容远远不止这些,我们选择了常用的几种:单例模式.委托模式.观察者模式.MVC模式. 委托模式 委托模 ...

  4. 再起航,我的学习笔记之JavaScript设计模式28(委托模式)

    ## 委托模式 ### 概念介绍 **委托模式(Entrust): **多个对象接收并处理同一请求,他们将请求委托给另一个对象统一处理请求. ### 利用委托优化循环 如果我们有一个需求需要让用户点击 ...

  5. PHP设计模式系列 - 外观模式

    外观模式 通过在必需的逻辑和方法的集合前创建简单的外观接口,外观设计模式隐藏了调用对象的复杂性. 外观设计模式和建造者模式非常相似,建造者模式一般是简化对象的调用的复杂性,外观模式一般是简化含有很多逻 ...

  6. akka设计模式系列-While模式

    While模式严格来说是while循环在Akka中的合理实现.while是开发过程中经常用到的语句之一,也是绝大部分编程语言都支持的语法.但while语句是一个循环,如果循环条件没有达到会一直执行wh ...

  7. Android设计模式系列--模板方法模式

    模板方法,和单例模式是我认为GOF的23中最简单的两种模式.但是我个人对模板方法的经典思想特别推崇,虽然模板方法在大对数情况下并不被推荐使用,但是这种通过父类调用子类的方法,使用继承来改变算法的一部分 ...

  8. PHP设计模式系列 - 工厂模式

    工厂模式 提供获取某个对象实例的一个接口,同时使调用代码避免确定实例化基类的步骤. 工厂模式 实际上就是建立一个统一的类实例化的函数接口.统一调用,统一控制. 工厂模式是php项目开发中,最常用的设计 ...

  9. c++设计模式系列----builder模式

    看了好几处关于builder模式的书和博客,总感觉不是很清楚,感觉不少书上的说的也不是很准确.最后还是看回圣经<设计模式>.看了好久终于感觉明白了一点了. 意图: builder模式提出的 ...

随机推荐

  1. C# winfrom打印技术初探

    最近用到了winform去打印,网上查了一些资料,大概内容: 一 .首先有几个类 PageSetupDialog . PrintDialog .PrintDocument .PrintPreviewC ...

  2. 撩课-Web大前端每天5道面试题-Day26

    1.vuejs与angularjs以及react的区别? .与AngularJS的区别 相同点: 都支持指令:内置指令和自定义指令. 都支持过滤器:内置过滤器和自定义过滤器. 都支持双向数据绑定. 都 ...

  3. Golang 使用FreeType-go进行字体

         FreeType库(http://www.freetype.org/)是一个完全免费(开源)的.高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, O ...

  4. mysql安装配置、主从复制配置详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/8213723.html 邮箱:moyi@moyib ...

  5. CSS reset的审视

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=758 一.CSS re ...

  6. 小程序:获取input输入的值

    wxml <input placeholder='输入你的姓名' value='{{name}}' bindblur='nameblur'></input>   js data ...

  7. HTML5 FormData实现文件上传实例

    表单提交,文件上传是一个常用又十分麻烦的功能,以前要上传文件通常都是借助插件或者flash来实现,噼里啪啦的加载一大堆东西.自从有了HTML5的FormData后,老板再也不用担心我的上传了. For ...

  8. vue自定义日历组件的实现

    实现一个日期组件,如图: components.js代码如下: Vue.component('sc-calendar',{ template:'<div class="scCalend ...

  9. .net开发环境搭建

    本地开发环境下载网址:https://msdn.itellyou.cn/,选择个人免费版本 下载工具 下载安装win7系统选择asp.net 和web开发,右侧可选全部选择,大约11GB左右

  10. 规划行业GIS云平台“城智图”上线运行

    首先祝各位朋友中秋节快乐! 城智图(www.imapcity.com)是远景GIS云平台的首个应用项目,它以全新的方式为规划部门提供地理信息服务,改变了以前规划部门只有CAD成果数据,难以查阅.深入挖 ...