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

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设计模式介绍——CHM

    - 中介者模式:用一个中介对象来封装一系列的对象交互,降低系统的耦合度。 - 观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 - 状态...

    23种 设计模式---面向对象的基本原则

    - 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互,降低系统的耦合度。 - 备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复...

    PHP设计模式

    常见的行为型模式包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)...

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

    中介者模式是一种行为设计模式,它允许将对象间的直接交互简化为通过一个中介对象来实现。这种模式的目的是减少类之间不必要的直接通信,从而降低系统的耦合度。 在PHP中实现中介者模式,主要涉及以下几个关键组件...

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

    中介者模式(Mediator Pattern)是软件设计模式中的一种,属于对象行为型模式。它的主要目的是减少对象之间的直接交互,降低耦合性,使得对象之间的关系更加松散,提高系统的可扩展性和可维护性。在PHP中,中介者...

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

    在PHP中,通过中介者模式,我们可以构建更加灵活、易于理解和维护的系统,同时避免了过多的直接依赖导致的问题。在实际开发中,可以根据需求选择适当地使用中介者模式,优化代码结构,提高软件质量。

    PHP设计模式PDF版

    - **中介者模式(Mediator)**:用一个中介对象来封装一系列的对象交互。 - **备忘录模式(Memento)**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 - **观察者模式...

    PHP 设计模式-design-patterns.zip

    "PHP 设计模式-design-patterns.zip"这个压缩包很可能包含了对多种设计模式在PHP中的实现示例。设计模式通常分为创建型、结构型和行为型三大类,下面我们将详细探讨这些类别中的主要设计模式。 **创建型设计模式:*...

    php 23种设计模式-整理篇.zip

    16. **中介者模式(Mediator)**:定义一个中介对象来简化多个对象之间的交互。 17. **备忘录模式(Memento)**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复对象...

    php23种完整设计模式(完整代码)

    17. **中介者模式**:定义一个中介对象来简化原本复杂的对象交互关系。 18. **备忘录模式**:在不破坏封装性的前提下,捕获一个对象的状态,并在需要时恢复它。 19. **观察者模式**:定义对象之间的一对多依赖关系...

    design-patterns-php:用PHP编写的设计模式

    - 中介者模式(Mediator):定义一个中介对象来简化原本复杂的对象间交互。 - 观察者模式(Observer):定义对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 -...

    php设计模式案例详解

    9. **中介者设计模式**:用一个中介对象来封装一系列的对象交互,降低对象之间的耦合度。 10. **职责链设计模式**:将请求沿着接收者链进行传递,直到某个对象决定处理它。 11. **命令设计模式**:将请求封装为一...

    PHP设计模式之观察者模式(Observer)详细介绍和代码实例

    - 与中介者模式(Mediator)相似,中介者模式也封装了对象间的关系,但它通过一个中介者来封装复杂的更新逻辑,而不是直接与多个观察者通信。 - 与单例模式(Singleton)相关联,单例模式可以确保ChangeManager...

    design-patterns:用PHP编写的一些设计模式

    - 中介者模式:用一个中介对象来封装一系列的对象交互,降低系统的耦合度。 - 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复对象的状态。 - 观察者...

    使用纯粹的PHP 编写的 kafka 客户端kafka-php-master.zip

    - **微服务通信**:在微服务架构中,Kafka可以作为服务间异步通信的中介,提高系统的解耦度和可扩展性。 总之,"kafka-php-master"是一个强大的工具,让PHP开发者能够充分利用Kafka的强大功能,实现高效、可靠的...

Global site tag (gtag.js) - Google Analytics