≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 网络编程 > PHP笔记

PHP设计模式之调解者模式的简单示例

人气:363 时间:2020-12-12

这篇文章主要为大家详细介绍了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
/*   四海网 www.q1010.com   */
 
    /**  
     * 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>
 

 

本文来自:http://www.q1010.com/173/15420-0.html

注:关于PHP设计模式之调解者模式的简单示例的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:

您可能感兴趣的文章

上一篇:解决MySQL的Root密码忘记,查看或修改的问题
下一篇:PHP设计模式之责任链模式的简单示例
热门文章
  • PHP 写入WRITE编码为UTF8的文件示例
  • PHP 中文字符串截取函数示例:支持gb2312,gbk,big
  • PHP 简单留言板的制作示例
  • 解决Fatal error: Call to undefined function mb_convert_encoding() in错误问题
  • PHP语言基础(标记、注释、变量、数组、常量、函数)示例
  • php 生成迅雷链接的简单示例
  • php 获取短网址的实现方法
  • PHP 通用分页类的简单示例
  • PHP 使用文件方式导入导出整个MYSQL数据库的实现方法
  • php 获取MYSQL错误的简单示例
  • 最新文章
    • 解决PHP使用redis实现统计缓存MySQL压力的问题
    • php 简单的上传进度条的简单示例
    • php 给html中引用的js和css路径打上版本号的实现方法
    • php 实现计算年龄精准到年月日的实例
    • php+ajax无刷新分页的简单示例
    • 解决php+ajax无刷新上传图片的问题
    • 解决PHP生成HTML静态页面的问题
    • 解决PHP使用uniqid函数生成唯一ID的问题
    • 解决PHP防刷票的一些问题
    • 微信access_token的获取开发的实现方法

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。