一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

PHP設計模式之調解者模式的深入解析

調解者模式,這個模式的目的是封裝一組對象之間的相互作用,防止對象之間相互干擾,調解者(Mediator)在同事對象(Colleague)之間充當中間匯聚點。同事對象之間應該保持松散耦合,避免一個對象直接明確指向另一個對象。在調解者模式下,對象的關系和依賴發生沖突時,我們可以使用調解者在耦合的對象之間協調工作流,依賴可以從同事朝調解者或從調解者向同事建立,這兩個方向上的依賴都可以使用AbstractColleague或AbstractMediator中斷。



對象不是孤立的,對象之間必須相互協作才能完成任務。雖然調解者模式可以限制對象之間的相互作用,但如果濫用,會致使編寫聚合性類變得非常困難。舉一個實用的例子,在領域驅動設計(Domain-Driven Design)中的服務就是實體之間的調解者。再舉一個php相關的例子,Zend_Form裝飾和過濾功能實際上可以看作是Zend_Form_Decorator和Zend_Filter實例之間的一個簡單調解者,它們都使用Zend_Validate對象進行驗證。

當調解者必須監聽同事對象的事件時,它通常是作為觀察者(Observer)實現的,產生一個黑板(blackboard)對象,一些同事寫,另一些同事就讀。來自同事的事件被推向調解者,再由調解者將其轉發給其它訂閱的同事,同事之間不需要相互了解,這個架構成功用于隨Zend框架發布的Dojo JavaScript庫。這個模式的另一個好處是對象的變化包含在計算方法中,可以通過配置不同的調解者實現這一目標,但實例化相關對象將是一個松散的操作,不同容器和工廠之間的協作關系將是分散的。

參與者:
◆同事(Colleague):重點是它的職責,它只與一個調解者Mediator或AbstractMediator通信。
◆調解者(Mediator):協同多個Colleagues(AbstractColleagues)共同工作。
◆AbstractMediator,AbstractColleague:從這些角色的真實實現解耦的可選接口,可能不止一個AbstractColleague角色。
下面的代碼實現了一個表單輸入的過濾過程,類似于Zend_Form_Element功能。
復制代碼 代碼如下:
    <?php
    /** 
     * AbstractColleague. 
     */ 
    interface Filter 
    { 
 public function filter($value); 
    } 

    /** 
     * Colleague. We decide in the implementation phase 
     * that Colleagues should not know the next Colleague 
     * in the chain, resorting to a Mediator to link them together. 
     * This choice succesfully avoids a base abstract class 
     * for Filters. 
     * Remember that this is an example: it is not only 
     * Chain of Responsibility that can be alternatively implemented 
     * as a Mediator. 
     */ 
    class TrimFilter implements Filter 
    { 
  public function filter($value) 
  { 
      return trim($value); 
  } 
    } <PRE class=php name="code">    /** 
     * Colleague. 
     */ 
    class NullFilter implements Filter 
    { 
 public function filter($value) 
 { 
     return $value ? $value : ''; 
 } 
    } 

    /** 
     * Colleague. 
     */ 
    class HtmlEntitiesFilter implements Filter 
    { 
 public function filter($value) 
 { 
     return htmlentities($value); 
 } 
    }
</PRE><PRE class=php name="code">    /** 
     * The Mediator. We avoid referencing it from ConcreteColleagues 
     * and so the need for an interface. We leave the implementation 
     * of a bidirectional channel for the Observer pattern's example. 
     * This class responsibility is to store the value and coordinate 
     * filters computation when they have to be applied to the value. 
     * Filtering responsibilities are obviously a concern of 
     * the Colleagues, which are Filter implementations. 
     */ 
    class InputElement 
    { 
 protected $_filters; 
 protected $_value; 

 public function addFilter(Filter $filter) 
 { 
     $this->_filters[] = $filter; 
     return $this; 
 } 

 public function setValue($value) 
 { 
     $this->_value = $this->_filter($value); 
 } 

 protected function _filter($value) 
 { 
     foreach ($this->_filters as $filter) { 
  $value = $filter->filter($value); 
     } 
     return $value; 
 } 

 public function getValue() 
 { 
     return $this->_value; 
 }   
    } 

    $input = new InputElement(); 
    $input->addFilter(new NullFilter()) 
   ->addFilter(new TrimFilter()) 
   ->addFilter(new HtmlEntitiesFilter()); 
    $input->setValue(' You should use the <h1>-<h6> tags for your headings.'); 
    echo $input->getValue(), "/n";
</PRE>
<PRE></PRE>

php技術PHP設計模式之調解者模式的深入解析,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 99在线在线视频免费视频观看 | 美女一区二区三区 | 91年精品国产福利线观看久久 | 91精品国产丝袜高跟鞋 | 国产熟睡乱子伦视频观看看 | 色呦呦网站在线观看 | 亚洲一区二区三区深夜天堂 | 激情丝袜 | 国产伦精品一区二区三区 | 2021国产精品一区二区在线 | 国产欧美自拍 | 国产一区二区高清 | 国内精品一区二区三区最新 | 欧美中文字幕一二三四区 | 99视频精品全部国产盗摄视频 | 久久久久琪琪去精品色村长 | 91久久国产情侣真实对白 | 国产精品午夜国产小视频 | 草草草在线 | 夜色55夜色66亚洲精品网站 | 日韩精品高清自在线 | 免费成人在线观看视频 | 久久狠| 91麻豆国产精品91久久久 | aa级国产女人毛片水真多 | 国产色婷婷精品免费视频 | 亚洲图片小说网 | 亚洲综合色色图 | 午夜欧美精品 | 免费精品国产福利片 | 久久精品国产99国产 | 国产成人黄网址在线视频 | 伊人久久免费视频 | www.色网站 | 91中文字幕在线 | 国产精品第2页 | 小视频免费在线观看 | 四虎久久久 | 亚洲第一se情网站 | 国产精品久久久久久久成人午夜 | 久久精品*5在热 |