php设计模式
程序员文章站
2024-02-06 08:50:16
...
场景:要做个php的数据接口,返回xml格式的数据。
我们通常是这么写的。
class Data{ private $_data = array(); public function __construct( $data ){ $this -> data = $data; } public function formatXml( $data ){ $xml = ''; $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 .= ''; $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)来实现不同策略的算法。
推荐阅读
-
php无刷新利用iframe实现页面无刷新上传文件(1/2)_PHP教程
-
程序员 - 为什么我把Apache和PHP都安装到了D磁盘,在phpinfo()里面却发现配置文件在c:windows 里面
-
反射调用private方法实践(php、java)_php实例
-
关于PHP的多图下传和处理,麻烦高手写一段代码供研习
-
Php获取金书网的书名的实现代码
-
php ci框架验证码实例分析_PHP
-
æ¯è¾è¯¦ç»PHPçæéæ页é¢æç¨_PHPæç¨
-
phpMyAdmin 缺少 mysqli 扩展。请检查 PHP 配置 的解决方案_PHP教程
-
PHP中使用mktime获取时间戳的一个黑色幽默分析_PHP教程
-
php读xml