PHP设计模式——中介者模式

声明:本系列博客参考资料《大话设计模式》,作者程杰。

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

        UML类图:

        

          角色:       

          中介者接口(UnitedNations):在里面定义了各个同事之间相互交互所需要的方法。

          具体的中介者实现对象(UnitedCommit):它需要了解并为维护每个同事对象,并负责具体的协调各个同事对象的交互关系。

          同事类的定义(Country):通常实现成为抽象类,主要负责约束同事对象的类型,并实现一些具体同事类之间的公共功能,

          具体的同事类(China):实现自己的业务,需要与其他同事对象交互时,就通知中介对象,中介对象会负责后续的交互。

         核心代码:

         

<?php
/**
 * Created by PhpStorm.
 * User: Jiang
 * Date: 2015/6/9
 * Time: 21:15
 */

//中介者接口:可以是公共的方法,如Change方法,也可以是小范围的交互方法。
//同事类定义:比如,每个具体同事类都应该知道中介者对象,也就是每个同事对象都会持有中介者对象的引用,这个功能可定义在这个类中。

//抽象国家
abstract class Country
{
    protected $mediator;
    public function __construct(UnitedNations $_mediator)
    {
        $this->mediator = $_mediator;
    }
}

//具体国家类
//美国
class USA extends Country
{
    function __construct(UnitedNations $mediator)
    {
        parent::__construct($mediator);
    }

    //声明
    public function Declared($message)
    {
        $this->mediator->Declared($message,$this);
    }

    //获得消息
    public function GetMessage($message)
    {
        echo "美国获得对方消息:$message<br/>";
    }
}
//中国
class China extends Country
{
    public function __construct(UnitedNations $mediator)
    {
        parent::__construct($mediator);
    }
    //声明
    public function  Declared($message)
    {
        $this->mediator->Declared($message, $this);
    }

    //获得消息
    public function GetMessage($message)
    {
        echo "中方获得对方消息:$message<br/>";
    }
}

//抽象中介者
//抽象联合国机构
abstract class UnitedNations
{
    //声明
    public abstract function Declared($message,Country $colleague);
}

//联合国机构
class UnitedCommit extends UnitedNations
{
    public $countryUsa;
    public $countryChina;

    //声明
    public function Declared($message, Country $colleague)
    {
        if($colleague==$this->countryChina)
        {
            $this->countryUsa->GetMessage($message);
        }
        else
        {
            $this->countryChina->GetMessage($message);
        }
    }
}

          调用客户端测试代码:

         

header("Content-Type:text/html;charset=utf-8");
//--------------------------中介者模式-------------------
require_once "./Mediator/Mediator.php";

//测试代码块
$UNSC = new UnitedCommit();
$c1 = new USA($UNSC);
$c2 = new China($UNSC);
$UNSC->countryChina = $c2;
$UNSC->countryUsa =$c1;
$c1->Declared("姚明的篮球打的就是好");
$c2->Declared("谢谢。");

       适用场景:

       1、如果一组对象之间的通信方式比较复杂,导致相互依赖,结构混乱,可以采用中介者模式

       2、如果一个对象引用很多对象,并且跟这些对象交互,导致难以复用该对象

       欢迎关注我的视频课程,地址如下,谢谢。

   PHP面向对象设计模式

时间: 2024-08-25 12:48:46

PHP设计模式——中介者模式的相关文章

15、Python与设计模式--中介者模式

一.仓储管理系统 有一个手机仓储管理系统,使用者有三方:销售.仓库管理员.采购.需求是:销售一旦达成订单,销售人员会通过系统的销售子系统部分通知仓储子系统,仓储子系统会将可出仓手机数量减少,同时通知采购管理子系统当前销售订单:仓储子系统的库存到达阈值以下,会通知销售子系统和采购子系统,并督促采购子系统采购:采购完成后,采购人员会把采购信息填入采购子系统,采购子系统会通知销售子系统采购完成,并通知仓库子系统增加库存.从需求描述来看,每个子系统都和其它子系统有所交流,在设计系统时,如果直接在一个子系

跟屌丝大哥一起学习设计模式---中介者模式

中介者模式(Mediator):用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 举例:在一个公司里面,有很多部门.员工(我们统称他们互相为Colleague"同事"),为了完成一定的任务,"同事"之间肯定有许多需要互相配合.交流的过程.如果由各个"同事"频繁地到处去与自己有关的"同事"沟通,这样肯定会形成一个多对多的杂乱的联系网络而造成工作效率低下

Java设计模式--中介者模式

中介者模式 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. Mediator Pattern Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from refering to each other explicitly, and i

详解Java设计模式编程中的中介者模式_java

定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 类型:行为类模式 类图: 中介者模式的结构       中介者模式又称为调停者模式,从类图中看,共分为3部分:  抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信.一般包括一个或几个抽象的事件方法,并由子类去实现. 中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法.从一个同事类接收消息,然后通过消息影响其他同时类. 同事类:

java设计模式之中介者模式_java

中介者模式 面向对象设计鼓励将行为分布到各个对象中, 这种分布可能会导致对象间有许多连接. 在最坏的情况下, 每一个对象都需要知道其他所有对象. 虽然将一个系统分割成许多对象可增强可复用性, 但是对象间相互连接的激增又会降低其可复用性. 大量的连接关系使得一个对象不可能在没有其他对象的协助下工作(系统表现为一个不可分割的整体), 此时再对系统行为进行任何较大改动就十分困难. 因为行为被分布在许多对象中, 结果是不得不定义很多子类以定制系统的行为. 由此我们引入了中介者对象Mediator:  

轻松掌握java中介者模式_java

定义:用来降低多个对象和类之间的通信复杂性.中介者模式属于行为型模式. 特点:      1.降低了类的复杂度,将一对多转化成了一对一.     2.各个类之间的解耦.     3.符合迪米特原则. 企业级开发和常用框架中的应用:mvc模式中的c 具体实例: public class Demo { public static void main(String[] args) { Mediator m = new Mediator(); Department d1 = new Department

PHP设计模式之中介者模式

中介者: 中介者设计莫用于开发一个对象,这个对象能够在类似对象相互之间不直接交互的情况下传送或调节对这些对象的集合的修改  处理具有类似属性并且属性需要保持同步的非耦合对象时,最佳的做法是使用基于中介者设计模式的对象. <?php        /**        * 测试用例描述:示例代码不仅允许乐队进入和管理他们的音乐合集,而且还允许乐队更新他们的配置文件,修改乐队相关信息以及更新其CD信息        *  现在,艺术家可上传MP3集合并从Web站点撤下CD. 因此, Web站点需要保

Java设计模式之中介者模式

一.引子 中介在现实生活中并不陌生,满大街的房屋中介.良莠不齐的出国中介--.它们的存在是因为它们能给我们的生活带来一些便利:租房.买房用不着各个小区里瞎转:出国留学也不用不知所措. 中介者模式在程序设计中也起到了类似的作用. 二.定义与结构 GOF给中介者模式下的定义是:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互.简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个"中介"对象,使得两头的对

深入理解JavaScript系列(36):设计模式之中介者模式详解_基础知识

介绍 中介者模式(Mediator),用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 主要内容来自:http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/ 正文 软件开发中,中介者是一个行为设计模式,通过提供一个统一的接口让系统的不同部分进行通信.一般,如果系统有很多子模块需要直接沟通,都要创建一个中央控制点让其各模块通过该中央控制点进行