php模式设计之 中介者模式

  • 中介者模式

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

  • 设计场景:
    1. 我们有一个CD类和一个MP3类,两个类的结构相似。
    2. 我们需要在CD类更新的时候,同步更新MP3类。
    3. 传统的做法就是在CD类中实例化MP3类,然后去更新,但是这么做的话,代码就会很难维护,如果新增一个同样的MP4类,那么就没法处理了。
    4. 中介者模式很好的处理了这种情况,通过中介者类,CD类中只要调用中介者这个类,就能同步更新这些数据。
    5. 我们的phpwind论坛中,之前有用到过这个设计模式。
  • 代码:

    <?php
    // | php设计模式 之中介者模式                                             |
    // +----------------------------------------------------------------------+
    // | 主要的功能就是在调用cd类中的change()方法的时候也会调用mp3类中的
    // | save()方法,反之亦然
    //
    // | 例如以后再想添加一个MP4的类,新建一个MP4类以后,
    // | 直接在 ZhoneJie 类初始化的时候 $this->sonLists [] = ‘MP4‘; 就可以了
    // +----------------------------------------------------------------------+
    
    class CD{
        protected $mid;
        public function __construct($zj=null){
            $this->mid = $zj;
        }
        public function change(){
            if($this->mid){
                $this->mid->comChange($this);
            }
            $this->save();
        }
        public function save(){
            echo "this is CDclass ! <br /><br /><br />";
        }
    }
    
    class MP3{
        private $mid;
        public function __construct($zj=null){
            $this->mid = $zj;
        }
        public function change(){
            if($this->mid){
                $this->mid->change();
            }
            $this->save();
        }
        public function save(){
            echo "this is MP3class ! <br /><br /><br />";
        }
    }
    
    //中间类
    class ZhoneJie{
        private $sonLists;
        public function __construct(){
            //等于是先注册,下一步的时候会排除一个,然后把剩余的都调用一遍
            $this->sonLists [] = ‘CD‘;
            $this->sonLists [] = ‘MP3‘;
        }
        public function comChange($baseObj,$parameter=array()){
            //遍历初始化时候注册的 顾客
            foreach($this->sonLists as $class){
                //排除自身,然后剩余的其他顾客
                if(!($baseObj instanceof $class)){
                    //把类名实例化成对象
                    $otherObj = new $class;
                    $otherObj->save($parameter);
                }
            }
        }
    }
    

    调用:

    //调用开始
    $zj = new ZhoneJie;  //new以后返回一个中介的对象,然后把这个对象传入到下面去,对象也可以当变量使用
    $cd = new CD($zj);
    $cd->change();
时间: 2024-10-29 19:06:24

php模式设计之 中介者模式的相关文章

《JAVA与模式》之中介者模式(转载)

原文出处:http://blog.csdn.net/zhengzhb/article/details/7430098   定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 类型:行为类模式 类图: 中介者模式的结构 中介者模式又称为调停者模式,从类图中看,共分为3部分: 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信.一般包括一个或几个抽象的事件方法,并由子类去实现. 中介者实现类:从抽象

设计模式之行为型模式—— 3.8 中介者模式

<?php /**  * 3.8 中介者模式  *  定义:  *  用一个中介对象来封装一系列的对象交互.中介  *  者使各对象不需要显式的相互引用,从而使其耦  *  合松散,而起可以独立的改变它们之间的交互.  *   *  角色:  *  1. 抽象中介者(Mediator)类  *  职责:定义了同事对象到中介者对象的接口  *  2. 具体中介者类  *  职责:实现抽象类的方法,它需要知道所有  *    具体同事类,并从具体同事接收消息  *    ,向具体同事对象发出命令.

php模式设计之 注册树模式

什么是注册树模式? 注册树模式当然也叫注册模式,注册器模式.之所以我在这里矫情一下它的名称,是因为我感觉注册树这个名称更容易让人理解.像前两篇一样,我们这 篇依旧是从名字入手.注册树模式通过将对象实例注册到一棵全局的对象树上,需要的时候从对象树上采摘的模式设计方法.   这让我想起了小时候买糖葫芦,卖糖葫芦的将糖葫芦插在一个大的杆子上,人们买的时候就取下来.不同的是,注册树模式摘下来还会有,能摘很多次,糖葫芦摘一 次就没了... 为什么要采用注册树模式? 单例模式解决的是如何在整个项目中创建唯一

(行为型模式二)中介者模式

package com.modle; /** * 中介者模式 * @author k560 * */ /*需求:产品A要比产品B贵100块,当改A的价格,B的价格也要同步改动,反过来也一样*/ public class Mediator extends AbstractMediator{ private AbstracProduct productA; private AbstracProduct productB; public Mediator(AbstracProduct productA

24种设计模式--中介者模式【Mediator Pattern】

各位好,大家都是来自五湖四海,都要生存,于是都找了个靠山——公司,给你发薪水的地方,那公司就要想尽办法盈利赚钱,盈利方法则不尽相同,但是作为公司都有相同三个环节:采购.销售和库存,这个怎么说呢?比如一个软件公司,要开发软件,需要开发环境吧, Windows 操作系统,数据库产品等,这你得买吧,那就是采购,开发完毕一个产品还要把产品推销出去,推销出去了大家才有钱赚,不推销出去大家都去喝西北风呀,既然有产品就必然有库存,软件产品也有库存,你总要拷贝吧,虽然是不需要占用库房空间,那也是要占用光盘或硬盘

面向对象编程思想-中介者模式

一.引言 前两天休息日在网上打QQ斗地主,每盘结束后腾讯游戏平台会自动计算输赢的欢乐豆,嗯?挺好的,平时在面对面玩斗地主时,一盘游戏结束后,我们需要了解每个人的出牌状况,然后算出来输赢.现在有了游戏平台,玩家之间计算输赢这个操作交给了游戏平台,我们不再需要了解每个人的出牌状况.在软件设计中,我们将解决这种业务场景的模式称之为中介者模式 二.中介者模式 定义:用一个中介对象来封装一系列对象的交互.中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且独立改变它们之间的交互. 下面是中介者模式结

(8)中介者模式

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

Java 设计模式之中介者模式

本文继续23种设计模式系列之中介者模式. 定义 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 角色 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信.一般包括一个或几个抽象的事件方法,并由子类去实现. 中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法.从一个同事类接收消息,然后通过消息影响其他同时类. 同事类:如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对

中介者模式和php实现

中介者模式: 中介者模式(Mediator Pattern)定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互.中介者模式又称为调停者模式,它是一种对象行为型模式. 模式动机: 1.在用户与用户直接聊天的设计方案中,用户对象之间存在很强的关联性,将导致系统出现如下问题: 系统结构复杂:对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关联的其他所有对象,并进行适当处理. 2.对象可重用性差:由