策略模式

概念

策略模式帮助构建的对象不必自身包含逻辑,而是能够根据需要利用其他对象中的算法。

场景
  1. 例如有一个 CD 类,我们类存储了 CD 的信息。
  2. 原先的时候,我们在 CD 类中直接调用 getCD 方法给出 XML 的结果
  3. 随着业务扩展,需求方提出需要 JSON 数据格式输出
  4. 这个时候我们引进了策略模式,可以让使用方根据需求自由选择是输出 XML 还是 JSON
代码
<?php  

// 策略模式
// cd 类
class cd
{
    protected $cdArr;

    public function __construct($title, $info)
    {
        $this->cdArr['title'] = $title;
        $this->cdArr['info'] = $info;
    }

    public function getCd($typeObj)
    {
        return $typeObj->get($this->cdArr);
    }
}

class json
{
    public function get($return_data)
    {
        return json_encode($return_data);
    }
}

class xml
{
    public function get($return_data)
    {
        $xml = '<?xml version="0" encoding="utf-8"?>';
        $xml .= '<return>';
        $xml .= '<data>'.serialize($return_data).'</data>';
        $xml .= '</return>';
        return $xml;
    }
}

$cd = new cd('cd_1', 'cd_1');
echo $cd->getCd(new json);
echo $cd->getCd(new xml);
执行结果
{"title":"cd_1","info":"cd_1"}
<?xml version="0" encoding="utf-8"?><return><data>a:2:{s:5:"title";s:4:"cd_1";s:4:"info";s:4:"cd_1";}</data></return>

出自:https://learnku.com/docs/shxdledu/php-design-patterns-series-policy-patterns/9293

彼特城博客
请先登录后发表评论
  • latest comments
  • 总共0条评论