30-中介者模式
目录
代码示例
<?php
/**
* Description of MediatorDemo
* 中介者
* @author jm
*/
class MediatorDemo
{
//put your code here
public static function main()
{
$mediator = new MyMediator();
$mediator->createMediator();
$mediator->workAll();
}
}
interface IMediator{
public function createMediator();
public function workAll();
}
class MyMediator implements IMediator{
private $_user1;
private $_user2;
public function getUser1() {
return $this->_user1;
}
public function getUser2() {
return $this->_user2;
}
public function createMediator() {
$this->_user1 = new User1($this);
$this->_user2 = new User2($this);
}
public function workAll() {
$this->_user1->work();
$this->_user2->work();
}
}
abstract class User{
private $_mediator = null;
public function getMediator(){
}
public function __construct($mediator)
{
$this->_mediator = $mediator;
}
public abstract function work();
}
class User1 extends User{
public function __construct($mediator)
{
parent::__construct($mediator);
}
public function work()
{
print_r("User1 执行\n");
}
}
class User2 extends User{
public function __construct($mediator)
{
parent::__construct($mediator);
}
public function work()
{
print_r("User2 执行\n");
}
}
MediatorDemo::main();
输出
User1 执行
User2 执行
小结
中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。如果使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行
中介者模式,用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互交互,从而使其耦合松散,而且可以独立地改变它们之间的交互。
尽管将一个系统分割成许多对象通常可以增加其可复用性,但是对象间的交互连接的激增又会降低其可复用性了。
大量的连接使得一个对象不大可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体,所以,对系统的行为进行任何较大的改动就十分困难了。
中介者模式很容易在系统中应用,也很容易在系统中误用。当系统出现了‘多对多’交互复杂的对象群时,不要急于使用中介者模式,而要反思你的系统设计上是不是合理。
由于把对象如何协作进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到它们之间的交互上来,也就是站在一个更宏观的角度去看待系统。
中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的结合,以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。
本文部分收藏来自互联网,仅用于学习研究,著作权归原作者所有,如有侵权请联系删除
markdown 9ong@TsingChan