策略者模式小示例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了策略者模式小示例相关的知识,希望对你有一定的参考价值。

// 策略者模式

/**

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

以上是关于策略者模式小示例的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之建造者模式简明示例

Java设计模式Builder建造者模式,Builder设计模式简单代码示例

设计模式策略模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

程序员如何应对北上广高房价示例解说建造者模式

设计模式之策略模式(Strategy)详解及代码示例

如何在 Python 中编写与 Wikipedia 中的示例不同的策略模式?