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

中介者模式

发布时间:2020-12-14 04:46:25 所属栏目:百科 来源:网络整理
导读:原文链接:http://www.orlion.ga/749/ 解释: ? ? 中介者模式用于开发一个对象,这个对象能够在类似对象相互之间不直接交互的情况下传送或调解对这些对象的集合的修改,处理具有类似属性并且属性需要保持同步的非耦合对象时,最佳的做法是使用基于中介者模式

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

解释:

? ? 中介者模式用于开发一个对象,这个对象能够在类似对象相互之间不直接交互的情况下传送或调解对这些对象的集合的修改,处理具有类似属性并且属性需要保持同步的非耦合对象时,最佳的做法是使用基于中介者模式的对象

?

需求:

????同事类:有两个类A和B,类中各有一个数字,并且要保证类B中的数字永远是类A中数字的100倍。也就是说,当修改类A的数时,将这个数字乘以100赋给类B,而修改类B时,要将数除以100赋给类A。类A类B互相影响,就称为同事类。

class?ColleagueA{

	private?$number;

????public?function?setNumber($number,?$coll)?{
????????$this->number?=?$number;??
		$coll->setNumber($number*100);
????}

????public?function?getNumber()?{
????	return?$this->number;
????}
}

class?ColleagueB{

	private?$number;
	
????public?function?setNumber($number)?{
????????$this->number?=?$number;??
????}

????public?function?getNumber()?{
????	return?$this->number;
????}?
}??

$collA?=?new?ColleagueA();??
$collB?=?new?ColleagueB();??
??????????
$collA->setNumber(1000,?$collB);??
echo?$collA->getNumber();?
echo?'<br/>';?
echo?$collB->getNumber();

????上面的代码中,类A类B通过直接的关联发生关系,假如我们要使用中介者模式,类A类B之间则不可以直接关联,他们之间必须要通过一个中介者来达到关联的目的。

代码:

class?ColleagueA{

	public?$number;

????public?function?setNumber($number?,?$mediator)?{
????????$this->number?=?$number;??
		$mediator->change($this?,?$number*100);
????}

????public?function?getNumber()?{
????	return?$this->number;
????}
}

class?ColleagueB{

	public?$number;

????public?function?setNumber($number?,?$number/100);
????}

????public?function?getNumber()?{
????	return?$this->number;
????}
}?

//?中介者
class?Mediator{

	private?$_a;

	private?$_b;

	public?function?__construct(ColleagueA?$a?,?ColleagueB$b)?{
		$this->_a?=?$a;
		$this->_b?=?$b;
	}

	public?function?change($obj?,?$newNum)?{
		if?($obj?===?$this->_a)?{
			$this->_b->number?=?$newNum;
		}?else?if?($obj?===?$this->_b)?{
			$this->_a->number?=?$newNum;
		}
	}
}

$collA?=?new?ColleagueA();??
$collB?=?new?ColleagueB();

$mediator?=?new?Mediator($collA?,?$collB);
??????????
$collA->setNumber(1000,?$mediator);
echo?$collA->getNumber();?
echo?'<br/>';?
echo?$collB->getNumber();

(编辑:李大同)

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

    推荐文章
      热点阅读