博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
委托模式
阅读量:6323 次
发布时间:2019-06-22

本文共 1836 字,大约阅读时间需要 6 分钟。

原文链接:

解释:

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

需求:

    对于一个用户集合UserList:

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

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

在App.php中调用:

require 'UserList.php';$ul = new Delegate\UserList();$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 '
'; foreach ($users as $user) { echo '
' . $user .'
'; } echo '
'; }}

    App.php:

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

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

转载于:https://www.cnblogs.com/orlion/p/5350917.html

你可能感兴趣的文章
Ubuntu apache 禁止目录浏览
查看>>
常用脚本--归档ERRORLOG
查看>>
js网页倒计时精确到秒级
查看>>
常用CSS缩写语法总结
查看>>
TDD:什么是桩(stub)和模拟(mock)?
查看>>
C# 模拟POST提交文件
查看>>
PAT 解题报告 1004. Counting Leaves (30)
查看>>
Android开发之蓝牙 --修改本机蓝牙设备的可见性,并扫描周围可用的蓝牙设备
查看>>
[Head First设计模式]生活中学设计模式——外观模式
查看>>
Repository模式中,Update总是失败及其解析
查看>>
.Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序
查看>>
[原创]浅谈测试团队转型,思维模式的转变是关键
查看>>
Redis学习-SortedSet
查看>>
android CoordinatorLayout使用
查看>>
机器学习资料大汇总
查看>>
Python selenium 滚动条 详解
查看>>
微信程序开发
查看>>
如何退出minicom【学习笔记】
查看>>
Sqlserver 数据库基本查询
查看>>
图书馆维护系统总结
查看>>