中介者模式和php实现

中介者模式:
  中介者模式(Mediator Pattern)定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。

模式动机:
  1.在用户与用户直接聊天的设计方案中,用户对象之间存在很强的关联性,将导致系统出现如下问题:
系统结构复杂:对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关联的其他所有对象,并进行适当处理。
  2.对象可重用性差:由于一个对象和其他对象具有很强的关联,若没有其他对象的支持,一个对象很难被另一个系统或模块重用,这些对象表现出来更像一个不可分割的整体,职责较为混乱。
  3.系统扩展性低:增加一个新的对象需要在原有相关对象上增加引用,增加新的引用关系也需要调整原有对象,系统耦合度很高,对象操作很不灵活,扩展性差。
  4.在面向对象的软件设计与开发过程中,根据“单一职责原则”,我们应该尽量将对象细化,使其只负责或呈现单一的职责。
  5.对于一个模块,可能由很多对象构成,而且这些对象之间可能存在相互的引用,为了减少对象两两之间复杂的引用关系,使之成为一个松耦合的系统,我们需要使用中介者模式,这就是中介者模式的模式动机。

中介者模式包含如下角色:
  Mediator: 抽象中介者,在里面定义了各个同事之间相互交互所需要的方法。
  ConcreteMediator: 具体中介者,它需要了解并为维护每个同事对象,并负责具体的协调各个同事对象的交互关系。
  Colleague:抽象同事类,通常实现成为抽象类,主要负责约束同事对象的类型,并实现一些具体同事类之间的公共功能
  ConcreteColleague:具体同事类,实现自己的业务,需要与其他同事对象交互,就通知中介对象,中介对象会负责后续的交互

UML类图:

  

//代码实现:

header("Content-type:text/html;Charset=utf-8");
//抽象同事类,家教
abstract class Tutor{
    protected $message;   //个人信息
    protected $mediator;  //为家教服务的中介机构
    function __construct($message,Mediator $mediator){
        $this->message = $message;
        $this->mediator = $mediator;
    }
    //获取个人信息
    function getMessage(){
        return $this->message;
    }
    //找学生
    abstract function findStudent();
}
//具体同事类,大学生家教
class UndergraduateTutor extends Tutor{
   //家教类型
   public $type = "UndergraduateTutor";

   function __construct($message,Mediator $mediator){
          parent::__construct($message,$mediator);
   }
   //找学生,让中介机构代为寻找
   function findStudent(){
         $this->mediator->matchStudent($this);
   }
}
//具体同事类,高中生家教
class SeniorStudentTutor extends Tutor{
    //家教类型
   public $type = "SeniorStudentTutor";

   function __construct($message,Mediator $mediator){
          parent::__construct($message,$mediator);
   }
   //找学生,让中介机构代为寻找
   function findStudent(){
         $this->mediator->matchStudent($this);
   }
}
//具体同事类,初中生家教
class MiddleStudentTutor extends Tutor{
    //家教类型
   public $type = "MiddleStudentTutor";

   function __construct($message,Mediator $mediator){
          parent::__construct($message,$mediator);
   }
   //找学生,让中介机构代为寻找
   function findStudent(){
         $this->mediator->matchStudent($this);
   }
}

//抽象中介类
abstract class AbstractMediator{
    abstract function matchStudent(Tutor $tutor);
}
//具体中介类,为家教匹配合适的学生
class Mediator extends AbstractMediator{
    //定义其服务的所有家教,不在范围内的不服务
    private $serveObject = array("UndergraduateTutor","SeniorStudentTutor","MiddleStudentTutor");
    //匹配学生
    function matchStudent(Tutor $tutor){
         for($i=0;$i<count($this->serveObject);$i++){
              if($tutor->type == $this->serveObject[$i]){
                  $message = $tutor->getMessage();
                  echo "该家教个人信息为".print_r($message)."<br/>将为其匹配合适的学生";
                  break;
              }
         }
         if($i>=count($this->serveObject)){
             echo "该家教不在我中介机构服务范围内";
         }
    }
}

//测试
$mediator = new Mediator();
$undergraduateTutor = new UndergraduateTutor(array("name"=>"张三","age"=>22),$mediator);
$undergraduateTutor->findStudent();//结果:该家教个人信息为 Array ( [name] => 张三 [age] => 22 ),将为其匹配合适的学生
时间: 2024-08-19 23:58:46

中介者模式和php实现的相关文章

第19章 行为型模式—中介者模式

1. 中介者模式(Mediator Pattern)的定义 (1)定义:用一个中介对象来封装一系统对象交互.中介者使得各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互.       ①中介者模式主要用来将同事类之间网状结构变为星状结构,使同事类之间的关系变的清晰一些. ②所有对象只跟中介者对象进行通信,相互之间不再有联系,这样也能够集中控制这些对象的交互关系. (2)中介者模式的结构和说明 ①Mediator: 中介者接口.在里面定义各个同事之间交互需要的方法,可以

《大话设计模式》学习笔记21:中介者模式

同事间接收消息示例: 1.Mediator: public abstract class Mediator { public abstract void Send(string message, Colleague colleague); } 2.Colleague: public abstract class Colleague { protected Mediator mediator; public Colleague(Mediator mediator) { this.mediator

设计模式开始--中介者模式

中介者模式 一.问题 用一个中介对象来封装一系列对象的交互,好多对象之间交互,会形成错综复杂的网络,类和类之间相互引用,表现形式是多对多,为了改变这种紧耦合的情况,引入中介者,用中介者与各个类进行交互,形成一个星形的网络,中介者在星形网络的中间,其余的对象组成网络的每一个边 二.类图和实例 (1)未使用中介者(联合国)之前的国与国家之间的联系 (2)使用了中介者之后,国与国之间联系通过联合国进行联系 (3)类图设计 三.实现 (1)抽象中介者用于定义格式 具体中介者用于定义那几个类之间有关系,他

23种设计模式--中介者模式-Mediator Pattern

一.中介者模式的介绍     中介者模式第一下想到的就是中介,房子中介,婚姻中介啊等等,当然笔者也希望来个婚姻中介给我介绍一个哈哈哈,,回归正题中介者模式分成中介者类和用户类,根据接口编程的方式我们再把中介和用户类分成2个类,这样就成了抽象中介者角色,具体中介者角色.抽象同事类和具体同事类.来几个例子比如说各种游戏平台,还有我们最熟悉的QQ平台,等等这些都是中介者模式的具体应用,中介者模式常用于处理通信之间复杂有关联的业务,这样就会存在一个缺点比如说因为中介者处理了好多用户之间的关系,一但发生错

java中介者模式

中介者模式主要在于解耦,使用一个中介的对象,封装一组对象之间的交互,这样这些对象就可以不用彼此耦合. 应用场景: 1.当一组对象要进行沟通或者业务上的交互,但是其关系又很复杂混乱时. 2.当一个对象与其他对象要进行紧密的交互,又不想依赖于其他对象时. 3.想创造一个运行于多个类之间的对象,又不想生成新的子类. 附代码: 1 abstract class Link { //对象父类 2 protected int number; 3 4 public int getNumber() { 5 ret

中介者模式(Mediator)

一.中介者模式介绍 中介者模式:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用.从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式核心:1.就是将网状结构处理成星型结构      2.将多对多处理成一对多 例如:世界上各个国家的和平和安全,沟通和交流等等问题,如果各个国家都可以互相交互的话,容易造成混乱,关系复杂. 这个时候联合国的作用就出现了,联合国作为一个中介对象来维护各个国家的和平和安全等等的工作. 中介者模式UML图: 例如:公司中如果没有部门经理

【设计模式】中介者模式

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.中介者模式属于行为型模式. 介绍 意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理. 何

中介者模式(Mediator Pattern)

中介者模式:集中相关对象之间复杂的沟通和控制方式. 模式结构图: 例子: 在这里ChatRoom是一个中介者,有多个User会使用中介者,形成一个用户间的聊天室,如果以后添加一个管理员与用户沟通,就不需要修改User代码了(当然中介者的代码需要修改,因为要添加处理管理员与用户之间交互的功能),只要加一个管理员类Manager,与中介者ChatRoom沟通,User不需要知道别的用户,Manager也不需要知道用户的细节. public class ChatRoom { public static

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

一句话的概要 定义了一个中介对象来封装一系列对象之间的交互关系.中介者使各个对象之间不需要显示低相互引用.降低耦合度,并且可以独立改变他们的交互行为. 剧情 小明和女神今天做了一个非常有意义的事情.他们俩在一个房间里,剪刀石头布,并且还赌钱. 小明赢了的话,十块钱.女神赢了的话,五块钱. 这个时候,我们就要结合一下设计模式了. 首先,我们用观察者模式,让小明和女神加入到这个游戏中. 接着,我们用状态模式,来分别创建小明赢和女神赢的情况. 最后,我们用中介者模式关联这两个对象. 任务一:创建玩家

设计模式:Mediator中介者模式

//main.h #pragma once class Mediator; class School { public: virtual void action()=0; virtual void Setname(const char *buff)=0; protected: Mediator *mt; char namebuff[10]; }; class Studentone : public School { public: Studentone(Mediator *_mt, const