ホームページ  >  記事  >  バックエンド開発  >  PHP デザイン パターン: Mediator Pattern_PHP チュートリアル

PHP デザイン パターン: Mediator Pattern_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:44:04885ブラウズ

我们将给大家介绍调解者模式,这个模式的目的是封装一组对象之间的相互作用,防止对象之间相互干扰,调解者(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 メディエーターと同僚のオブジェクト
オブジェクトは分離されておらず、タスクを完了するにはオブジェクトが相互に協力する必要があります。メディエーター パターンはオブジェクト間の対話を制限できますが、悪用すると集約クラスの作成が非常に困難になる可能性があります。実用的な例を挙げると、ドメイン駆動設計のサービスはエンティティ間の仲介者です。別の PHP 関連の例を挙げると、Zend_Form の装飾関数とフィルタリング関数は、実際には、Zend_Form_Decorator インスタンスと Zend_Filter インスタンスの間の単純な仲介者として見ることができます。どちらも検証に Zend_Validate オブジェクトを使用します。
メディエーターが同僚オブジェクトのイベントをリッスンする必要がある場合、通常はオブザーバーとして実装され、一部の同僚が書き込み、他の同僚が読むための黒板オブジェクトが生成されます。同僚からのイベントはメディエーターにプッシュされ、メディエーターはそれを他のサブスクライブした同僚に転送します。このアーキテクチャーは、Zend Framework とともにリリースされた Dojo JavaScript ライブラリーで正常に使用されます。このパターンのもう 1 つの利点は、オブジェクトへの変更が計算メソッドに含まれることです。これは、さまざまなメディエーターを構成することで実現できますが、関連するオブジェクトのインスタンス化は緩やかな操作となり、さまざまなコンテナーとファクトリー間の協力関係が分散化されます。 。参加者:
◆同僚: 重要なのはその責任であり、Mediator または AbstractMediator の 1 つのメディエーターとのみ通信します。
◆メディエーター:複数の同僚(AbstractColleague)と協力して仕事をします。
◆AbstractMediator、AbstractColleague: これらのロールの実際の実装から切り離されたオプションのインターフェイス。複数の AbstractColleague ロールが存在する場合があります。
次のコードは、Zend_Form_Element 関数と同様のフォーム入力フィルタリング プロセスを実装します。
protected メディエーター パターンを紹介します。このパターンの目的は、オブジェクトのグループ間の相互作用をカプセル化し、オブジェクトが相互に干渉するのを防ぐことです。メディエーター (Mediator) は、同僚オブジェクト間の中間収束点として機能します。 (同僚)。 。


同僚オブジェクトは疎結合のままにし、避ける必要があります

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478778.html技術記事メディエーター パターンを紹介します。このパターンの目的は、オブジェクトのグループ間の相互作用をカプセル化し、オブジェクトが相互に干渉しないようにすることです。メディエーター (Mediator) は同僚オブジェクト (...
) 内にあります。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。