zoukankan      html  css  js  c++  java
  • 委托模式

    原文链接:http://www.orlion.ga/741/

    解释:

        通过分配或委托至其他对象,委托设计模式能够去除核心对象中的判决和复杂的功能性。(就是能够减少is else语句)

    需求:

        对于一个用户集合UserList:

    namespace Delegate;
    
    class UserList {
    
    	private $users = [];
    
    	public function addUser($user) {
    		$this->users[] = $user;
    	}
    
    	public function outXml() {
    	        // 不严谨,这里仅作实例
    		echo '<xml>';
    		foreach ($this->users as $user) {
    			echo '<user>' . $user .'</user>';
    		}
    		echo '</xml>';
    	}
    
    	public function outJson() {
    		echo json_encode($this->users);
    	}
    }

        UserList管理着许多用户,其中outXml()方法将这些用户以xml方式输出,outJson()以json格式输出。

    在App.php中调用:

    require 'UserList.php';
    
    $ul = new DelegateUserList();
    
    $ul->addUser('a');
    $ul->addUser('b');
    $ul->addUser('c');
    
    $type = 'xml';
    if ('xml' === $type) {
    	$ul->outXml();
    } else if ('json' === $type) {
    	$ul->outJson();
    }

        可以看到我们使用了一个if else语句做了一个判断userlist的输出方式。

    代码:

        首先修改一下UserList类为NewUserList:

    namespace Delegate;
    
    class NewUserList {
    
    	private $users = [];
    	
    	private $_typeObj;
    
    	public function __construct(UserListDelegate $typeObj) {
    		$this->_typeObj = $typeObj;
    	}
    
    	public function addUser($user) {
    		$this->users[] = $user;
    	}
    
    	public function outUserList() {
    		$this->_typeObj->outUserList($this->users);
    	}
    }

       

        利用委托模式,创建一个委托类接口:

    namespace Delegate;
    
    interface UserListDelegate {
    	public function outUserList(Array $users);
    }

        然后实现这个委托类接口:

    namespace Delegate;
    
    class XmlUserListDelegate implements UserListDelegate {
    
    	public function outUserList(Array $users) {
    		echo '<xml>';
    		foreach ($users as $user) {
    			echo '<user>' . $user .'</user>';
    		}
    		echo '</xml>';
    	}
    }

        App.php:

    require 'UserListDelegate.php';
    require 'XmlUserListDelegate.php';
    require 'NewUserList.php';
    
    $xmlUlDelegate = new DelegateXmlUserListDelegate();
    $ul = new DelegateNewUserList($xmlUlDelegate);
    
    $ul->addUser('a');
    $ul->addUser('b');
    $ul->addUser('c');
    
    $ul->outUserList();

        如果以Json方式输出则在构建UserList的时候传入一个JsonUserListDelegate对象(这里没写这个类)。

  • 相关阅读:
    PHP Cookies
    PHP 文件上传
    PHP 文件
    02_电话拨号器intent说明
    13_传智播客iOS视频教程_OC程序的编译链接
    12_传智播客iOS视频教程_注释和函数的定义和调用
    11_传智播客iOS视频教程_NS前缀和@符号
    10_传智播客iOS视频教程_NSString
    09_传智播客iOS视频教程_自动释放池与NSLog函数
    08_传智播客iOS视频教程_Foundation框架
  • 原文地址:https://www.cnblogs.com/orlion/p/5350917.html
Copyright © 2011-2022 走看看