设计模式之中介模式--房产中介的原理

设计模式之中介模式–房产中介的原理

中介模式就是大白话中介,出现一个中介解耦其他角色。

用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的互相引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。

为什么要使用中介模式

尽管将一个系统分割成许多对象会增加复用性,但是对象间互相连接的激增又会降低复用性。因为大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体,所以,对系统的行为进行任何较大的改动就十分困难了。

这是因为多个对象间互相耦合的原因,产生了很多依赖关系,比如

a -> b a依赖b
a -> c a依赖c
a -> d
b -> c
b -> d

他们互相之间有太多的依赖,这就是紧耦合。我们需要把他变成一个松耦合的程序,这时候就可以引入中介模式

比如在现实中,有很多租户要找房子,就需要找房东,很多租户和房东都有了依赖关系,租户和房东的依赖就很混乱,租户不知道怎么找到好的房东。这时候出现了房产中介,所有的租户不再需要找房东,只需要找中介就行了,房东同样不需要找租户,也只需要找中介。

再比如,世界各国之间关系复杂,中国需要找日本,需要找美国等等,后来出现了联合国,中国只需要找联合国就好了。

但是这样的话,就会出现一个问题,如果中介出了问题,那么就完蛋了,比如房产中介出问题,那么租户和房东就惨了。如果联合国出问题,那么各国也不好了。

所以,当系统出现多对多关系的时候,先思考是不是设计不合理,如果必须这么设计,在考虑使用中介模式。

这样的话就是把所有的压力给了中介,所以中介一定要做好。

中介的职责:

  • 需要知道所有人的信息,比如知道所有租户和房东
  • 需要根据这些信息,对租户和房东进行联系

php实现中介模式

先写中介类

/**
 * 中介模式
 * 中介抽象类
 */
abstract class Mediator{
    /**
     * 发送消息需要知道消息文本和谁发的
     * @param $msg
     * @param User $user
     */
    abstract function send($msg, User $user);
}

/**
 * 中介模式
 * 中介抽象类
 */
class Mediate extends Mediator{

    public $user1; //用户1
    public $user2; //用户2

    /**
     * 发送消息需要知道消息文本和谁发的
     * @param $msg
     * @param User $user
     */
    function send($msg, User $user) {
        //根据发送者告诉接收者,参数也可以多一个接收者
        if ($user == $this->user1) {
            //.....
        }
    }
}

有了中介再来两个用户和一个用户父类


/**
 * 中介模式
 * 用户抽象类
 */
abstract class User{

    public $mediator;
    
    /**
     * 让用户找到中介
     */
    public function __construct(Mediator $mediator) {
        $this->mediator = $mediator;
    }
}

/**
 * 中介模式
 * 用户类
 */
class User1 extends User{

    public function send($msg) {
        $this->mediator->send($msg, $this);
    }
}

只需要实现各个知道中介的具体类和一个中介类就可以了。

代码放在了我的github上面。

原创文章 84 获赞 7 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Thepatterraining/article/details/106017353