PHP设计模式之策略模式(Strategy)入门与应用案例

本文实例讲述了PHP设计模式之策略模式(Strategy)入门与应用。分享给大家供大家参考,具体如下:

这个策略模式,意思就是定义一系列算法,把它们一个个封装起来,并且使它们可相互替换,使用得算法的变化可独立于使用它的客户,简单来讲就是,策略模式设计帮助构建的对象不必自身包含逻辑,而是能够根据需要利用其他对象中的算法。

来看下应用场景:

       1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。

       2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。

       3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。

       4、客户端必须知道所有的策略类,并自行决定使用哪一个策略类,策略模式只适用于客户端知道所有的算法或行为的情况。

       5、 策略模式造成很多的策略类,每个具体策略类都会产生一个新类。

有点模糊是吧,咱就来看一个完整的应用场景:

例如有一个CD类,我们类存储了CD的信息。
原先的时候,我们在CD类中直接调用getCD方法给出XML的结果
随着业务扩展,需求方提出需要JSON数据格式输出
这个时候我们引进了策略模式,可以让使用方根据需求自由选择是输出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="1.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);

咱们接下来,再来了解一下一个网上比较经典的案例,来看张图片:

上面图片的意思可以按着下面这个方式来理解:

1.Joe做了一套相当成功的模拟鸭子的游戏。设计了一个超类Duck,然后让各种鸭子继承这个类。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5647.html