校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > PHP設計模式之中介者模式(Mediator Pattern)入門與應用案例詳解

PHP設計模式之中介者模式(Mediator Pattern)入門與應用案例詳解

熱門標簽:山西回撥外呼系統 青島語音外呼系統招商 昭通辦理400電話 騰訊外呼管理系統 岳陽外呼型呼叫中心系統在哪里 百應電話機器人服務 河南電銷卡外呼系統哪家強 山西探意電話機器人 揚州地圖標注app

本文實例講述了PHP設計模式之中介者模式(Mediator Pattern)。分享給大家供大家參考,具體如下:

咱們先來看下中介者模式(Mediator Pattern)的定義,它就是,用一個中介對象來封裝一系列的對象交互,中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互,這種模式又稱為調停者模式,它是一種對象行為型模式。

我們先來看用戶與用戶直接聊天的設計方案。

在這個方案設計的過程中,我們可以發揮想象,用戶對象之間存在很強的關聯性,將導致系統出現如下問題:

  1. 系統結構復雜:對象之間存在大量的相互關聯和調用,若有一個對象發生變化,則需要跟蹤和該對象關聯的其他所有對象,并進行適當處理
  2. 對象可重用性差:由于一個對象和其他對象具有很強的關聯,若沒有其他對象的支持,一個對象很難被另一個系統或模塊重用,這些對象表現出來更像一個不可分割的整體,職責較為混亂
  3. 系統擴展性低:增加一個新的對象需要在原有相關對象上增加引用,增加新的引用關系也需要調整原有對象,系統耦合度很高,對象操作很不靈活,擴展性差 

然而,在面向對象的軟件設計與開發過程中,根據“單一職責原則”,我們應該盡量將對象細化,使其只負責或呈現單一的職責,但是,對于一個模塊來說,可能由很多對象構成,而且這些對象之間可能存在相互的引用,為了減少對象兩兩之間復雜的引用關系,使之成為一個松耦合的系統,我們需要使用中介者模式,這就是我們使用中介者模式的動機。

來看下中介者模式包含的角色:

  •   Mediator: 抽象中介者,在里面定義了各個同事之間相互交互所需要的方法。
  •   ConcreteMediator: 具體中介者,它需要了解并為維護每個同事對象,并負責具體的協調各個同事對象的交互關系。
  •   Colleague:抽象同事類,通常實現成為抽象類,主要負責約束同事對象的類型,并實現一些具體同事類之間的公共功能
  •   ConcreteColleague:具體同事類,實現自己的業務,需要與其他同事對象交互,就通知中介對象,中介對象會負責后續的交互

再來看下圖片感受下:

來看一個完整的實例:

  1. 我們有一個CD類和一個MP3類,兩個類的結構相似。
  2. 我們需要在CD類更新的時候,同步更新MP3類。
  3. 傳統的做法就是在CD類中實例化MP3類,然后去更新,但是這么做的話,代碼就會很難維護,如果新增一個同樣的MP4類,那么就沒法處理了。
  4. 中介者模式很好的處理了這種情況,通過中介者類,CD類中只要調用中介者這個類,就能同步更新這些數據。

代碼實例如下:

?php
class CD {
 public $band = '';
 public $title = '';
 protected $_mediator;

 public function __construct(MusicContainerMediator $mediator = NULL) {
 $this->_mediator = $mediator;
 }

 public function save() {
 //具體實現待定
 var_dump($this);
 }

 public function changeBandName($bandname) {
 if ( ! is_null($this->_mediator)) {
  $this->_mediator->change($this, array("band" => $bandname));
 }
 $this->band = $bandname;
 $this->save();
 }
}
//MP3Archive類
class MP3Archive {
 protected $_mediator;

 public function __construct(MusicContainerMediator $mediator = NULL) {
 $this->_mediator = $mediator;
 }

 public function save() {
 //具體實現待定
 var_dump($this);
 }

 public function changeBandName($bandname) {
 if ( ! is_null($this->_mediator)) {
  $this->_mediator->change($this, array("band" => $bandname));
 }
 $this->band = $bandname;
 $this->save();
 }

}

 //中介者類
class MusicContainerMediator {
 protected $_containers = array();

 public function __construct() {
 $this->_containers[] = "CD";
 $this->_containers[] = "MP3Archive";
 }

 public function change($originalObject, $newValue) {
 $title = $originalObject->title;
 $band = $originalObject->band;
 foreach ($this->_containers as $container) {
  if ( ! ($originalObject instanceof $container)) {
  $object = new $container;
  $object->title = $title;
  $object->band = $band;
  foreach ($newValue as $key => $val) {
   $object->$key = $val;
  }
  $object->save();
  }
 }
 }
}

//測試實例
$titleFromDB = "Waste of a Rib";
$bandFromDB = "Never Again";
$mediator = new MusicContainerMediator();
$cd = new CD($mediator);
$cd->title = $titleFromDB;
$cd->band = $bandFromDB;
$cd->changeBandName("Maybe Once More");

運行結果:

object(MP3Archive)#3 (3) {
  ["_mediator":protected]=>
  NULL
  ["title"]=>
  string(14) "Waste of a Rib"
  ["band"]=>
  string(15) "Maybe Once More"
}
object(CD)#2 (3) {
  ["band"]=>
  string(15) "Maybe Once More"
  ["title"]=>
  string(14) "Waste of a Rib"
  ["_mediator":protected]=>
  object(MusicContainerMediator)#1 (1) {
    ["_containers":protected]=>
    array(2) {
      [0]=>
      string(2) "CD"
      [1]=>
      string(10) "MP3Archive"
    }
  }
}

還有個實例,一起看下吧:

//抽象同事類,家教
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;$icount($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 ),將為其匹配合適的學生

好啦,本次記錄就到這里了。

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • php設計模式 Mediator (中介者模式)
  • php設計模式之建造器模式分析【星際爭霸游戲案例】
  • php設計模式之抽象工廠模式分析【星際爭霸游戲案例】
  • php設計模式之工廠方法模式分析【星際爭霸游戲案例】
  • PHP設計模式之外觀模式(Facade)入門與應用詳解
  • PHP設計模式之觀察者模式(Observer)詳細介紹和代碼實例
  • php設計模式 Template (模板模式)
  • php設計模式 DAO(數據訪問對象模式)
  • PHP常用的三種設計模式匯總
  • php單態設計模式(單例模式)實例
  • php設計模式 Interpreter(解釋器模式)
  • php設計模式之中介者模式分析【星際爭霸游戲案例】

標簽:南陽 黃南 鎮江 湛江 銅川 婁底 寶雞 宜賓

巨人網絡通訊聲明:本文標題《PHP設計模式之中介者模式(Mediator Pattern)入門與應用案例詳解》,本文關鍵詞  PHP,設計模式,之,中介,者,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP設計模式之中介者模式(Mediator Pattern)入門與應用案例詳解》相關的同類信息!
  • 本頁收集關于PHP設計模式之中介者模式(Mediator Pattern)入門與應用案例詳解的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    欧美sm极限捆绑bd| 国产亚洲精品免费| 日韩一级二级三级| 午夜精品福利在线| 欧美性大战久久久久久久蜜臀 | 欧美成人精品高清在线播放| 日韩专区欧美专区| 欧美大胆人体bbbb| 成+人+亚洲+综合天堂| 日本一区免费视频| 色欧美片视频在线观看 | 国产成人在线免费| 亚洲天天做日日做天天谢日日欢 | 91美女片黄在线| 亚洲成av人片在线| 国产亚洲成aⅴ人片在线观看| av网站免费线看精品| 日韩激情中文字幕| 国产精品成人一区二区三区夜夜夜| 色婷婷av一区二区三区gif| 美女视频黄 久久| 国产精品国产三级国产| 91精品国产免费| av不卡在线观看| 狠狠色综合日日| 亚洲国产精品麻豆| 国产精品卡一卡二卡三| 91精品在线一区二区| 色综合久久中文字幕综合网 | 91浏览器打开| 韩国成人在线视频| 一二三区精品福利视频| 国产亚洲成年网址在线观看| 欧美浪妇xxxx高跟鞋交| 色综合色狠狠综合色| 成人99免费视频| 狠狠色狠狠色合久久伊人| 亚洲国产成人tv| 亚洲色图.com| 欧美激情在线一区二区| 欧美成人r级一区二区三区| 91福利视频网站| 在线看国产一区二区| 91丨porny丨蝌蚪视频| 成人性生交大片免费看在线播放 | 久久综合九色欧美综合狠狠| 欧美日韩不卡一区| 欧美日韩国产首页在线观看| 色婷婷香蕉在线一区二区| eeuss影院一区二区三区| 成人黄页在线观看| 成人av在线观| av电影在线观看不卡| 不卡的av在线播放| 99国产精品视频免费观看| 波多野洁衣一区| 色综合久久综合网| 欧美三级午夜理伦三级中视频| 91麻豆精品一区二区三区| 在线观看国产日韩| 欧美日韩在线播放一区| 欧美日韩成人在线| 精品黑人一区二区三区久久| 精品少妇一区二区三区| 久久精品亚洲一区二区三区浴池| 国产亚洲短视频| 亚洲免费在线电影| 亚洲自拍与偷拍| 青青青爽久久午夜综合久久午夜 | 精品久久久久久无| 日本一区二区三区国色天香| 中文字幕在线观看一区二区| 一区二区三区在线播| 日韩电影免费在线| 极品尤物av久久免费看| 成人蜜臀av电影| 欧美在线观看视频在线| 日韩精品一区二区在线观看| 日本一区免费视频| 天天爽夜夜爽夜夜爽精品视频| 精品一区二区三区视频 | 综合自拍亚洲综合图不卡区| 一区二区三区日韩在线观看| 五月婷婷色综合| 国产精品一品二品| 97成人超碰视| 日韩欧美国产一二三区| 日韩一区欧美小说| 免费不卡在线观看| 99精品欧美一区二区三区综合在线| 欧美亚洲动漫精品| 久久久精品免费网站| 亚洲综合激情网| 国产成人自拍在线| 91麻豆精品国产| 亚洲婷婷综合久久一本伊一区| 麻豆精品国产91久久久久久| 日本精品一级二级| 久久精品欧美一区二区三区不卡| 一区二区三区四区在线播放 | 国产日韩v精品一区二区| 亚洲一区二区三区在线看| 国产一区二区h| 在线播放欧美女士性生活| 欧美国产乱子伦| 激情av综合网| 欧美一级欧美三级在线观看 | 91蜜桃在线观看| 久久人人爽人人爽| 婷婷国产在线综合| 日本高清无吗v一区| 国产精品私人影院| 国产在线国偷精品产拍免费yy| 欧美日韩国产精选| 亚洲欧洲另类国产综合| 国产麻豆精品在线观看| 日韩三级电影网址| 日韩精彩视频在线观看| 欧美日韩一区在线观看| 亚洲少妇最新在线视频| 懂色av一区二区三区免费看| 久久久亚洲精品一区二区三区| 美腿丝袜亚洲三区| 日韩欧美国产三级| 蜜桃av一区二区| 欧美精品 国产精品| 亚洲高清一区二区三区| 欧美性生活一区| 亚洲国产精品一区二区久久恐怖片| 色婷婷精品大视频在线蜜桃视频| 亚洲区小说区图片区qvod| 91网页版在线| 亚洲精品国产无套在线观| 日本精品视频一区二区三区| 亚洲不卡一区二区三区| 欧美日韩在线三区| 视频一区视频二区在线观看| 欧美日韩国产123区| 蜜桃视频一区二区三区| 精品国产乱码久久久久久免费 | 久久机这里只有精品| 欧美videos中文字幕| 九九**精品视频免费播放| 日韩美女视频在线| 国产精品一二三四五| 中文字幕一区免费在线观看| 色av成人天堂桃色av| 日韩二区在线观看| 久久免费美女视频| 99在线精品免费| 性欧美疯狂xxxxbbbb| 久久久一区二区三区捆绑**| av成人动漫在线观看| 日韩精品国产欧美| 欧美韩日一区二区三区四区| av不卡免费在线观看| 日产精品久久久久久久性色| 国产拍揄自揄精品视频麻豆| 日本国产一区二区| 久久成人免费网| 中文字幕一区不卡| 欧美一区二区三区婷婷月色 | 欧美天天综合网| 美日韩一级片在线观看| 中文字幕一区二区三区乱码在线| 欧美色图一区二区三区| 国内精品视频一区二区三区八戒| 亚洲三级在线免费观看| 精品剧情v国产在线观看在线| 91蜜桃传媒精品久久久一区二区| 美女www一区二区| 综合久久综合久久| 精品电影一区二区| 欧美性一区二区| 成人黄色免费短视频| 麻豆精品在线观看| 一区二区三区鲁丝不卡| 国产偷国产偷亚洲高清人白洁 | 欧美一区二区免费| 欧洲生活片亚洲生活在线观看| 美国欧美日韩国产在线播放| 亚洲免费观看在线观看| 久久日一线二线三线suv| 欧美久久久影院| av中文字幕一区| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲成人av一区| 亚洲美女免费视频| 国产精品乱码一区二三区小蝌蚪| 欧美成人性福生活免费看| 欧美精品自拍偷拍| 欧美日韩情趣电影| 欧美综合视频在线观看| 91在线一区二区三区| 国产精品1区2区| 国产一区二区三区视频在线播放| 午夜av一区二区| 日韩在线播放一区二区| 亚洲成人精品影院| 香港成人在线视频|