// 策略者模式

/**

  • 类名: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);