加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

委托模式

发布时间:2020-12-14 04:46:31 所属栏目:百科 来源:网络整理
导读:原文链接:http://www.orlion.ga/741/ 解释: ????通过分配或委托至其他对象,委托设计模式能够去除核心对象中的判决和复杂的功能性。(就是能够减少is else语句) 需求: ????对于一个用户集合UserList: namespace?Delegate;class?UserList?{private?$users?=

原文链接: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对象(这里没写这个类)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读