// 策略者模式
/**
-
类名:Tactics
-
说明:策略者类,根据需要添加新的数据格式,只需要定义一个新的类名(比如HtmlData),方法名(getData)不变,将该方法的具体内容实现即可 */ class Tactics { // 示例数组 protected $demoList;
public function __construct() {
}
/*
- 添加数据 */ public function addData($key,$value){ $this->demoList[$key] = $value; }
/*
- 根据数据传递的数据格式对象,输出不同的数据格式 */ public function getTactics($obj) { return $obj->getData($this->demoList); } }
/**
- 类名:JsonData
- 说明:Json格式的数据 */ class JsonData { public function getData($data) { return json_encode($data); } }
/**
- 类名:XmlData
- 说明:xml格式的数据 */ class XmlData { public function getData($data) { $xml = '<?xml version="1.0" encoding="utf-8"?>'; $xml .= '<data>'; foreach ($data as $key => $value) { $xml .= '<group>'; $xml .= '<key>'.$key.'</key>'; $xml .= '<value>'.$value.'</value>'; $xml .= '</group>'; } $xml .= '</data>'; return $xml; } }
// 实例化策略者类的对象 $tacticsObj = new Tactics();
// 给类中的属性赋值 $tacticsObj->addData('name','张三'); $tacticsObj->addData('age','18');
// 传递JsonData类型的对象,获取Json数据格式 echo $tacticsObj->getTactics(new JsonData); // 传递XmlData类型的对象,获取xml数据格式 echo $tacticsObj->getTactics(new XmlData);