手机版

深入分析PHP设计模式中的中介模式

时间:2021-11-19 来源:互联网 编辑:宝哥软件园 浏览:

中介模式,这种模式的目的是封装一组对象之间的交互,并防止对象之间相互干扰。调解人充当同事之间的中间汇聚点。同事们应该保持松散的耦合,避免一个物体直接指向另一个物体。在中介器模式下,当对象之间的关系和依赖发生冲突时,我们可以使用中介器来协调耦合对象之间的工作流,从同事到中介器或从中介器到同事之间可以建立依赖,两个方向的依赖都可以被抽象同事或抽象中介器中断。

对象不是孤立的,对象之间必须相互协作才能完成任务。虽然调解者模式可以限制对象之间的相互作用,但如果滥用,会致使编写聚合性类变得非常困难。举一个实用的例子,在领域驱动设计(领域驱动设计)中的服务就是实体之间的调解者。再举一个服务器端编程语言(专业超文本预处理器的缩写)相关的例子,Zend_Form装饰和过滤功能实际上可以看作是Zend_Form_Decorator和Zend_Filter实例之间的一个简单调解者,它们都使用Zend_Validate对象进行验证。当调解者必须监听同事对象的事件时,它通常是作为观察者(观察员)实现的,产生一个黑板(黑板)对象,一些同事写,另一些同事就读。来自同事的事件被推向调解者,再由调解者将其转发给其它订阅的同事,同事之间不需要相互了解,这个架构成功用于随阿维斯陀经注解框架发布的Dojo JavaScript库。这个模式的另一个好处是对象的变化包含在计算方法中,可以通过配置不同的调解者实现这一目标,但实例化相关对象将是一个松散的操作,不同容器和工厂之间的协作关系将是分散的。参与者:同事(同事):重点是它的职责,它只与一个调解者调解人或抽象调解器通信。调解者(调解员):协同多个同事(抽象同事)共同工作抽象调解人,抽象同事:从这些角色的真实实现解耦的可选接口,可能不止一个抽象同事角色。下面的代码实现了一个表单输入的过滤过程,类似于Zend_Form_Element功能。复制代码代码如下:php /** *抽象同事*/interface Filter { public function Filter($ value);} /** *同事。我们在实施阶段*决定同事不应该认识链中的下一个同事*并求助于调解人将他们联系在一起。*此选择成功避免了过滤器的基本抽象类*。*请记住,这是一个示例:它不仅仅是*责任链,还可以作为调解人*来实施*/class TrimFilter实现过滤器{公共函数Filter($ value){ return trim($ value);} } PRE class=PHP name=' code '/* * * college .*/class NullFilter实现筛选器{公共函数筛选器($ value){返回值$ value?$ value :} } /** *同事*/class HtmlEntitiesFilter实现Filter { public function Filter($ value){ return htmlentities($ value);} }/PREE class=PHP name=' code '/* * * The Mediator .我们避免从具体同事*中引用它,因此不需要接口。我们将双向通道的实现*留给观察者模式的例子。*这个类的职责是存储值和坐标*当它们必须应用于值时过滤计算。*过滤职责显然是同事们关心的问题,他们是过滤器的实现者*/class InputElement { protected $ _ filters;受保护的$ _值公共函数addFilter(Filter $ Filter){ $ this-_ filters[]=$ Filter;返回$ this}公共函数setVaLue($ value){ $ this-_ value=$ this-_ filter($ value);}受保护的function _ filter($ value){ foreach($ this-_ filters as $ filter){ $ value=$ filter-filter($ value);}返回$ value}公共函数GetVaLue(){ return $ this-_ value;} } $ input=new input element();$ input-AddFilter(new NullFilter())-AddFilter(new trimfFilter())-AddFilter(new htmlentitieFilter());$input-setValue('您应该在标题中使用h1-h6标记。');echo $input-getValue(),“\ n”;/PRE/PRE

版权声明:深入分析PHP设计模式中的中介模式是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。