中介者设计模式

中介者模式是一种行为型设计模式,用于减少对象间的直接交互,降低耦合。当系统中对象间的关联关系变得复杂时,中介者模式通过创建一个中介对象来集中处理这些交互。该模式在PHP中的应用示例展示了如何通过中介类来注册和销售房屋,使得多个房屋对象可以独立且易于复用。中介者模式的优点包括减少耦合,提高系统的灵活性,但可能增加中介类的复杂性。
摘要由CSDN通过智能技术生成
  1. 中介者模式是属于行为型模式
  2. 主要为了解决就是对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。

一、使用场景
1、系统中对象间存在较为复杂引用,导致依赖关系和结构混乱而无法复用的情况。

2、想通过一个中间类来封装多个类的行为,但是又不想要太多的子类。

二、优点
1、减少耦合,将多个对象之间的联系紧耦合封装到中介对象中。

2、将多个对象之间的交互联系集中在中介对象中。发送变化仅需修改中介对象即可、提供系统的灵活性、使同事对象独立而易于复用。

3、符合迪米特原则。就是说一个对象应当对其他对象有尽可能少的了解。减少各个对象之间的了解。

三、缺点
每添加对象,就需要在中介处更新,如果对象过多,中介类就会变的臃肿,复杂难以维护中介出问题,整个程序玩完,道理和卖房中介卷钱跑路一样

举例:

<?php

abstract class Mediator
{
    abstract public function Sale(HouseOwner $houseOwner);
    abstract public function Register(HouseOwner $houseOwner);


}


class HouseMediator extends Mediator
{

    public $houseOwners = [];

    public function Register(HouseOwner $houseOwner)
    {
        if (!in_array($houseOwner, $this->houseOwners)) {

            $this->houseOwners[$houseOwner->houseType] = $houseOwner;
        }
    }

    public function Sale(HouseOwner $houseOwner)
    {
       echo $houseOwner->HouseMessage();

       echo '不合适?还有其他房源';
       foreach ($this->houseOwners as $house){
        echo  $house->HouseMessage()."</br>";
       }
    }


}


abstract class HouseOwner
{
    public $mediator;

    public $houseType;

    public function __construct(Mediator $mediator)
    {
        $this->mediator = $mediator;
    }
    public abstract function HouseMessage();

    public abstract function Sale();
}


class OneHouse extends HouseOwner
{
    public $houseType=1;
    public function HouseMessage()
    {
        echo '这是单间';
    }

    public function Sale()
    {
       $this->mediator->Sale($this);
    }

}
class TwoHouse extends HouseOwner
{
    public $houseType=2;
    public function HouseMessage()
    {
        echo '这是两房';
    }
    public function Sale()
    {
        $this->mediator->Sale($this);
    }
}

class ThreeHouse extends HouseOwner
{
    public $houseType=3;
    public function HouseMessage()
    {
        echo '这是三房';
    }
    public function Sale()
    {
        $this->mediator->Sale($this);
    }
}

$m = new HouseMediator();


$u1 = new OneHouse($m);

$u2 = new TwoHouse($m);

$u3 = new ThreeHouse($m);


$m->Register($u1);
$m->Register($u3);
$m->Register($u2);

$u3->Sale();//通过中介介绍房间信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值