• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php设计模式

php 搞代码 3年前 (2022-01-23) 12次浏览 已收录 0个评论

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

我们通常是这么写的。

class Data{    private $_data = array();    <span>!本文来源gaodai#ma#com搞*!代#%^码网5</span><pre>搞gaodaima代码

public function __construct( $data ){ $this -> data = $data; } public function formatXml( $data ){ $xml = ‘<?xml version=”1.0″ encoding=”utf-8″?>’; $xml .= ”; $xml .= ” .serialize($return_data). ”; $xml .= ”; 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 .= '';          $xml .= '' .serialize($return_data). '';          $xml .= '';          return $xml;    }}$data = new Data( array('title' => 'Strategy', 'language' => 'PHP') )$data -> getData( new Json() );  //获取Json格式$data -> getData( new Xml() );  //获取xml格式....//随便扩展

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php设计模式
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址