php设计模式

WBOY
发布: 2016-06-23 13:22:46
原创
878 人浏览过

场景:要做个php的数据接口,返回xml格式的数据。

我们通常是这么写的。

class Data{    private $_data = array();    public function __construct( $data ){        $this -> data = $data;    }        public function formatXml( $data ){        $xml = '<?xml version="1.0" encoding="utf-8"?>';          $xml .= '<return>';          $xml .= '<data>' .serialize($return_data). '</data>';          $xml .= '</return>';          return $xml;    }        //返回xml数据    public function getXml(){       // 怎样把数据处理成xml就不写了        return $this -> formatXml($this -> _data);    }}$data = new Data( array('title' => 'Strategy', 'language' => 'PHP')  );echo $data -> getXml();
登录后复制

那么问题来了,我需求要变了,这次要返回个JSON格式的,我该怎么处理呢?最简单的方法,在Data类里面再加入个getJson方法。问题虽然解决了,但记不记得我们之前讲的设计模式原则,对的,他违反了开闭原则。对扩展开放,对修改关闭。Data类的作用太复杂了,违反了单一职责原则。那么我们就要想办法了。

class Data{    private $_data = array();    public function __construct( $data ){            $this -> _data = $data;    }        //    public function getData( IFormat $format ){        $format -> formatData( $this -> _data );    }}interface IFormat{    public function formatData();}class Json implements IFormat{    public function formatData( $data ){        return json_encode( $data );    }}class Xml implements IFormat{    public function formatData( $data ){        $xml = '<?xml version="1.0" encoding="utf-8"?>';          $xml .= '<return>';          $xml .= '<data>' .serialize($return_data). '</data>';          $xml .= '</return>';          return $xml;    }}$data = new Data( array('title' => 'Strategy', 'language' => 'PHP') )$data -> getData( new Json() );  //获取Json格式$data -> getData( new Xml() );  //获取xml格式....//随便扩展
登录后复制

策略模式:类本身(Data)不包含处理策略(formatData),可以调用不通的策略对象(xml和Json)来实现不同策略的算法。

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板