php设计模式之委托模式

使用委托模式目的是消除潜在的、难以控制的if/else语句。

<?php
/**
 * 原来的程序写法
 * @var playlist
 */
$playlist = new playlist();
$playlist->addSong(‘/home/aaron/music/aa.mp3‘, ‘Brr‘);
$playlist->addSong(‘/home/aaron/music/bb.mp3‘, ‘GoodBye‘);
if ($extType == ‘pls‘) {
    $playlistContent = $playlist->getPLS();
} else {
    $playlistContent = $playlist->getM3U();
}

上述仅仅是一个示例,如果有更多的Type,那么这里的if/else将会有多个并且每次增加类型需要修改原来的文件、原来的类。而接下来的委托模式将改变这个现状。委托模式的类并不提供实际的解决方案,接受参数交给不同的类来解决实际问题。

/**
* 委托模式的类
*/
class newPlaylist
{
    private $__songs;
    private $__typeObject;
    public function __construct($type)
    {
        $this->__songs = array();
        $object = "{$type}Playlist";
        $this->__typeObject = new $object;
    }

    public function addSong($location, $title)
    {
        $song = array(‘location‘ => $location, ‘title‘=>$title);
        $this->__songs[] = $song;
    }

    public function getPlaylist()
    {
        $playlist = $this->__typeObject->getPlaylist($this->__songs);
        return $playlist;
    }
}
/**
* m3u   Delegate
*/
class m3uPlaylistDelegate
{

    public function getPlaylist($songs)
    {
        $m3u = "#EXTM3U\n\n";
    }

    /*
    other function
     */
}
/**
* pls    Delegate
*/
class plsPlaylistDelegare
{

    function getPlaylist($songs)
    {
        $pls=" ";
    }
}

每增加一种类型只需要增加一个对应的类即可,并且注意写法要统一,具体使用方法中将不存在if/else的判断。示例如下。

/**
 * 如何使用
 */
$extType = ‘pls‘;//$extTyle = ‘m3u‘;
$playlist = new newPlaylist($extType);
$playlistContent = $playlist->getPlaylist();
时间: 2024-10-19 07:57:00

php设计模式之委托模式的相关文章

iOS.常用设计模式.02.委托模式

WTDelegate #import <Foundation/Foundation.h> @protocol WTDelegate <NSObject> @required - (void)sleep; - (void)eat; - (void)work; @end WTPhilosopher.h #import <Foundation/Foundation.h> #import "WTDelegate.h" @interface WTPhiloso

PHP设计模式系列 - 委托模式

委托模式 通过分配或委托其他对象,委托设计模式能够去除核心对象中的判决和复杂的功能性. 应用场景 设计了一个cd类,类中有mp3播放模式,和mp4播放模式 改进前,使用cd类的播放模式,需要在实例化的类中去判断选择什么方式的播放模式 改进后,播放模式当做一个参数传入playList函数中,就自动能找到对应需要播放的方法. 代码:cd类,未改进之前,选择播放模式是一种痛苦的事情 <?php //委托模式-去除核心对象中的判决和复杂的功能性 //使用委托模式之前,调用cd类,选择cd播放模式是复杂的

iOS常用设计模式之委托模式

委托模式在Cocoa Touch框架和Cocoa框架中都有很多的应用.例如在应用启动的时候需要的一个类:UIApplication.在程序的入口函数main函数里面: int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([WBAppDelegate class])); } } UIApplication的方法UIAppl

设计模式之委托模式

一:概念 一个对象接收到了请求,但是自己不处理,交给另外的对象处理,就是委托模式,例如 老板接到了活, 然后把活转手给了工人去做. 二:示例 创建一个类IReceiveTask,代表接收任务的动作 public interface IReceiveTask { void receive(String task); } 创建一个类BossService,老板可以接收任务,并且可以命令工人 public class BossService implements IReceiveTask{ priva

iOS设计模式-委托模式

委托是指给一个对象提供机会对另一对象中的变化做出反应或者相应另一个对象的行为.其基本思想是协同解决问题. 在程序中:一般情况下 1.委托需要做的工作有: 1.1定义协议与方法 1.2声明委托变量 1.3设置代理 1.4通过委托变量调用委托方法 2.代理需要做的工作有: 2.1遵循协议 2.2实现委托方法 下面讲解一下使用委托实现页面传值的解决方法: 加入我们有两个ViewController 分别为:ViewController和 TrendViewController 一 .需求: 我们要实现

[js高手之路]设计模式系列课程-委托模式实战微博发布功能

在实际开发中,经常需要为Dom元素绑定事件,如果页面上有4个li元素,点击对应的li,弹出对应的li内容,怎么做呢?是不是很简单? 大多数人的做法都是:获取元素,绑定事件 1 <ul> 2 <li>跟着ghostwu学习javascript设计模式的应用1</li> 3 <li>跟着ghostwu学习javascript设计模式的应用2</li> 4 <li>跟着ghostwu学习javascript设计模式的应用3</li&g

android深入之设计模式(一)委托模式

(一)委托模式简介 委托模式是基本的设计模式之一.委托,即是让另一个对象帮你做事情. 许多其他的模式,如状态模式.策略模式.访问者模式本质上是在更特殊的场合采用了委托模式. 委托模式使得我们可以用聚合来替代继承,java-组合优于继承. 最简单的java委托模式 class RealPrinter { void print() { System.out.println("real printer"); } } class Printer { RealPrinter realPrinte

IOS常用设计模式——委托模式(IOS开发)

委托模式在之前的博客中用到了很多,比如各种复杂的Cocoa Touch框架的UI控件,几乎都用到了委托来响应控件事件或控制其他对象. 委托模式 -问题: 处理一切IOS应用都在UIApplication中完成,但是在设计过程中并不友好,它藕合度高,职责不清,难以维护,需要不断不断的重构,因此需要把看似功能很复杂的类分解或者分派成功能明确的类. Apple中我们经常用两种类,一个是框架类,各种用,不断的用,啥都能用:另一个就是协议类,就是协议. 协议的目的,终究是降低一个对象的复杂度和藕合度.框架

设计模式--委托模式C++实现

原文章地址:http://www.cnblogs.com/zplutor/archive/2011/09/17/2179756.html [委托模式 C++实现] 我对.Net的委托模型印象很深刻,使用委托,可以快速实现观察者模式,免去写很多繁杂重复的代码.遗憾的是,C++并没有提供这样的模型,为了达到相似的目的,需要继承一个类并重写virtual方法,这种做法需要写很多代码,效率比较低下(使用过MFC的应该都能体会到).然而,在强大的C++面前,没有什么是不可能的,已经有很多人针对这个问题进行