PHP設計模式漫談之調解者模式_PHP教程

來源:互聯網
上載者:User
我們將給大家介紹調解者模式,這個模式的目的是封裝一組對象之間的相互作用,防止對象之間相互幹擾,調解者(Mediator)在同事對象(Colleague)之間充當中間匯聚點。
同事對象之間應該保持鬆散耦合,避免一個對象直接明確指向另一個對象。在調解者模式下,對象的關係和依賴發生衝突時,我們可以使用調解者在耦合的對象之間協調工作流程,依賴可以從同事朝調解者或從調解者向同事建立,這兩個方向上的依賴都可以使用AbstractColleague或AbstractMediator中斷。


圖1 調解者和同事對象

對象不是孤立的,對象之間必須相互協作才能完成任務。雖然調解者模式可以限制對象之間的相互作用,但如果濫用,會致使編寫彙總性類變得非常困難。舉一個實用的例子,在領域驅動設計(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功能。


同事對象之間應該保持鬆散耦合,避免一個對象直接明確指向另一個對象。在調解者模式下,對象的關係和依賴發生衝突時,我們可以使用調解者在耦合的對象之間協調工作流程,依賴可以從同事朝調解者或從調解者向同事建立,這兩個方向上的依賴都可以使用AbstractColleague或AbstractMediator中斷。
圖1 調解者和同事對象
對象不是孤立的,對象之間必須相互協作才能完成任務。雖然調解者模式可以限制對象之間的相互作用,但如果濫用,會致使編寫彙總性類變得非常困難。舉一個實用的例子,在領域驅動設計(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功能。
/** * Colleague. */ class NullFilter implements Filter { public function filter($value) { return $value ? $value : ; } } /** * Colleague. */ class HtmlEntitiesFilter implements Filter { public function filter($value) { return htmlentities($value); } }
___FCKpd___2
原文名:Practical Php Patterns: Mediator 作者:Giorgio
filters;

protected 我們將給大家介紹調解者模式,這個模式的目的是封裝一組對象之間的相互作用,防止對象之間相互幹擾,調解者(Mediator)在同事對象(Colleague)之間充當中間匯聚點。


同事對象之間應該保持鬆散耦合,避免

http://www.bkjia.com/PHPjc/478778.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/478778.htmlTechArticle我們將給大家介紹調解者模式,這個模式的目的是封裝一組對象之間的相互作用,防止對象之間相互幹擾,調解者(Mediator)在同事對象(...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.