天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP設(shè)計模式之調(diào)解者模式的深入解析

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



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

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

參與者:
◆同事(Colleague):重點是它的職責(zé),它只與一個調(diào)解者M(jìn)ediator或AbstractMediator通信。
◆調(diào)解者(Mediator):協(xié)同多個Colleagues(AbstractColleagues)共同工作。
◆AbstractMediator,AbstractColleague:從這些角色的真實實現(xiàn)解耦的可選接口,可能不止一個AbstractColleague角色。
下面的代碼實現(xiàn)了一個表單輸入的過濾過程,類似于Zend_Form_Element功能。
復(fù)制代碼 代碼如下:
    <?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技術(shù)PHP設(shè)計模式之調(diào)解者模式的深入解析,轉(zhuǎn)載需保留來源!

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

主站蜘蛛池模板: 成人国内精品久久久久影院 | 男人狂躁进女人免费视频公交 | 久久综合丁香激情久久 | 欧美黑人巨大xxxxx | 成人bt下载| 亚洲国产亚综合在线区尤物 | 乌克兰粉嫩摘花第一次 | 日韩大胆视频 | 国产超碰AV人人做人人爽 | 国产午夜精品理论片久久影视 | 轻点灬大ji巴太粗太双性高h | 花蝴蝶在线高清视频观看免费播放 | 欧美人与动牲交XXXXBBBB免费 | 日韩亚洲欧美中文高清 | 99精产国品一二产区在线 | 日韩欧美一区二区三区免费看 | 四虎一级片 | 成人国产三级在线播放 | 亚洲精品国产自在在线观看 | 色一情一乱一伦一区二区三区 | 美女被触手注入精子强制受孕漫画 | 国产午夜不卡在线观看视频666 | chinese情侣自拍啪hd | 一级毛片皇帝 宫女 | 国产精品99久久久久久动态图 | 国产精品久久毛片A片软件爽爽 | 亚洲精品第五页中文字幕 | 国产成人精品免费视频大全办公室 | 色欲AV蜜臀AV在线观看麻豆 | MD传媒在线观看佳片 | 国产免费怕怕免费视频观看 | 妹妹我要色 | 最近中文字幕在线中文高清版 | 国产成人免费片在线观看 | 美国女孩毛片 | 胸大的姑娘中文字幕视频 | 午夜福利32集云播 | 国产乱对白精彩在线播放 | 亚洲视频免费看 | 久久视频在线视频 | 贵妃高h荡肉呻吟np杨玉环 |