`
OrangeHolic
  • 浏览: 259560 次
  • 来自: 北京
社区版块
存档分类
最新评论

PHP-中介者模式

阅读更多
大家都在说设计模式,俺们也来插一脚解说一下。
先来中介者模式吧,大家都把设计模式将复杂了。GOF第一中介者模式为:用一个中介对象封装一系列对象的交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立的改变它们之间的交互。中介者模式使原有一对多的依赖变成了一对一的依赖,同事类只依赖中介者,降低了类之间的耦合。
其实说白了就是将下面的联系方式A变成了B方式而已,不仅降低类与类之间的耦合,也减少了我们维护的成本。


图1:联系方式A


图2:联系方式B

在A方式下各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此对方,修改B的一个函数,你就需修改A,C,E三个类的代码,至少修改4个类,在B方式下,可以使各个对象间的耦合松散,只需关心和  Mediator (矩形)的关系,修改一个类既可以。

例子比较通俗,果农与化肥老板,中介是商场。果农如果需要化肥,直接和商场要化肥;化肥老板若需水果,同样直接和商场打交道。照惯例上和UML和代码:



1.定义抽象中介者类,就是商场的抽象,就一个sell方法
interface Mediator{
    function sell($name,$number);
}


2.定义抽象同事类,咱们的抽象同事类就是一个人。。。。。。,他buy买东西,他getThings卖东西。
abstract class Human{
    protected $mediator=null;
    abstract public  function getThings($number);
    abstract public function buy($name,$number);

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

    public function getMediator()
    {
        return $this->mediator;
    }
    //set/get自己去加!!
}

3.具体中介者
class ConcreteMediator implements  Mediator{
    private $orchardist=null;//果农
    private $boss=null;//化肥老板
    public function sell($name,$number){
        if($name == 'fruit'){
            $fruit=$this->orchardist->getThings($number);
            echo '商场从果农给你'.$fruit.'!'."\n";
            return $fruit;
        }
        if($name == 'fertilizer'){
            $fertilizer=$this->boss->getThings($number);
            echo '商场从化肥老板那里给你'.$fertilizer.'!'."\n";
            return $fertilizer;
        }
    }
    //set/get自己去加!!

}

4.具体2个同事,果农和化肥老板
class Orchardist extends Human{
    public function __construct($mediator){
        $this->mediator=$mediator;
    }
    public  function getThings($number){
        return $number.'水果';
    }
    public function buy($name,$number){
        $result=$this->mediator->sell($name,$number);
        echo '我们果农得到了'.$result."\n";
    }

}

class Boss extends Human{
    public function __construct($mediator){
    $this->mediator=$mediator;
    }
    public  function getThings($number){
        return $number.'化肥';
    }
    public function buy($name,$number){
        $result=$this->mediator->sell($name,$number);
        echo '我们化肥老板得到了'.$result."\n";
    }
}


最后测试:
$mediator=new  ConcreteMediator();
$orchardist=new Orchardist($mediator);
$boss=new Boss($mediator);
$mediator->setOrchardist($orchardist);
$mediator->setBoss($boss);


$orchardist->buy('fertilizer',200);//果农买200袋化肥
$boss->buy('fruit',50);//化肥老板买50个水果

结果:














  • 大小: 17 KB
  • 大小: 16.5 KB
  • 大小: 14.9 KB
  • 大小: 4.5 KB
分享到:
评论

相关推荐

    php设计模式 Mediator (中介者模式)

    php /** * 中介者模式 * * 用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用从而使其耦合松散,而且可以独立地改变它们之间的交互 */ abstract class Mediator { abstract public function send($...

    设计模式-7种开发语言(C#、JAVA、JavaScript、C++、Python、Go、PHP).pdf

    24种设计模式的入门,整合7种开发语言的...第十八节 中介者模式 第十九节 备忘录模式 第二十节 状态模式 第二十一节 访问者模式 第二十二节 原型模式 第二十三节 享元模式 第二十四节 责任链模式 第二十五节 解释器模式

    PHP设计模式之中介者模式(Mediator Pattern)入门与应用案例详解

    本文实例讲述了PHP设计模式之中介者模式(Mediator Pattern)。分享给大家供大家参考,具体如下: 咱们先来看下中介者模式(Mediator Pattern)的定义,它就是,用一个中介对象来封装一系列的对象交互,中介者使各对象不...

    php设计模式之中介者模式分析【星际争霸游戏案例】

    主要介绍了php设计模式之中介者模式,结合具体案例形式分析了星际争霸游戏中使用PHP中介者模式的相关操作技巧,需要的朋友可以参考下

    PhpPatterns:php设计模式

    Php模式 php设计模式 运行测试./vendor/bin/phpunit 创建型模式实例 单例模式 :check_mark_button: 工厂模式 :check_mark_button: 抽象工厂模式 :check_mark_button: 简单工厂模式 :check_...中介者器模式 空对象模式

    客客出品专业威客系统KPPW2.2GBK【正式版】.zip

    KPPW是一款基于PHP MYSQL技术构架的威客系统,积客客团队多年实践和对威客模式商业化运作的大量调查分析而精心策划研发,是您轻松搭建威客网站的首选利器。KPPW针对威客任务和商品交易模式进行了细致的分析,提供...

    仿贝壳百分百开源房产系统网站

    房产电商细分门户,根据运营者的需求,可对家新房,二手房、出租、商业地产(商铺与写字档)、楼盘分销等功能模板单独或组合运营。 平台植入广告,吸引客源,增加企业知名度,树立品牌形象,达到互利共赢,专业的...

    yii2-repository-pattern:Yii2 的存储库设计模式

    存储库在域和数据映射层之间起到中介作用,就像内存中的域对象集合。 这个存储库试图在没有另一个(EG Active Record)的情况下适应设计模式。 安装 安装此扩展的首选方法是通过 。 要么跑 $ composer require ...

    汽车行业门户网站系统php正式版

    使用本系统可建立一个功能强大的汽车消费门户网站,面向当地汽车销售商、二手车中介、维修保养服务商、汽车租赁服务商、汽车驾校、个人用户提供汽车信息服务。主要赢利模式为商家VIP包年服务、产品推荐和信息发布...

    event-mediator:具有最小依赖性的常规事件中介器(调度程序),因此易于插入和使用

    具有最小依赖性的常规事件中介器(调度程序),因此易于插入和使用。 正在安装 推荐的安装Event-Mediator的方法是将与以下配合使用: composer require dragonrun1/event-mediator 您也可以从以获取它。 发牌 ...

    仿贝壳房少房产系统网站

    房产电商细分门户,根据运营者的需求,可对家新房,二手房、出租、商业地产(商铺与写字档)、楼盘分销等功能模板单独或组合运营。 平台植入广告,吸引客源,增加企业知名度,树立品牌形象,达到互利共赢,专业的...

    [删除] 提供一套MediPro汽车门户网站,php+mysql,经测试可用,供学习用

    使用本系统可建立一个功能强大的汽车消费门户网站,面向当地汽车销售商、二手车中介、维修保养服务商、汽车租赁服务商、汽车驾校、个人用户提供汽车信息服务。主要赢利模式为商家VIP包年服务、产品推荐和信息发布...

    详解EventDispatcher事件分发组件

    Symfony EventDispatcher以一个简单有效的方式实现了中介者模式,事件分发器就是那个中介,让系统和插件不会耦合在一起,这让上面的插件系统成为可能,而且他会让你的项目可扩展性更好。 上面的话,翻译自Symfony...

    房少房产系统网站 LessHousingHousingSystem.rar

    房产电商细分门户,根据运营者的需求,可对家新房,二手房、出租、商业地产(商铺与写字档)、楼盘分销等功能模板单独或组合运营。 平台植入广告,吸引客源,增加企业知名度,树立品牌形象,达到互利共赢,专业的...

    【家教商城网站】精美在线家教商城平台网站源码修复版带WAP手机端[thinkphp内核]

    内附本站亲测详细安装教程,修复一些BUG,保证可安装。 本源码采用PHP语言开发,内核采用TP框架也就是(thinkphp,版本为TP...TP框架为国内PHP开发框架使用人数较多、操作简洁的轻量级开发框架,开发模式采用MVC模式

    仿贝壳房少房产系统网站 ShellLikeHousingWithLessRealEstate.rar

    房产电商细分门户,根据运营者的需求,可对家新房,二手房、出租、商业地产(商铺与写字档)、楼盘分销等功能模板单独或组合运营。平台植入广告,吸引客源,增加企业知名度,树立品牌形象,达到互利共赢,专业的网络...

Global site tag (gtag.js) - Google Analytics