加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP设计模式—策略模式

发布时间:2020-12-13 21:24:14 所属栏目:PHP教程 来源:网络整理
导读:? 定义: 策略模式(Strategy) :它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 ? 结构: Strategy(策略类) :定义所有支持的算法的公共接口。 ConcreteStrategy(具体策略类) :封装了具体

?

定义:

策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

?

结构:

  • Strategy(策略类):定义所有支持的算法的公共接口。
  • ConcreteStrategy(具体策略类):封装了具体的算法或行为,继承于Strategy。
  • Context:Context上下文,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用。
  • Client:客户端代码。

?

代码实例:

/**
 * Strategy.php(策略类)
 * Class Strategy
 */
abstract class Strategy
{
    *
     * 算法方法
     */
    public function doInterface();
}


*
 * ConcreteStrategyA.php(具体策略类)
 * Class ConcreteStrategyA
 class ConcreteStrategyA extends*
     * 算法A具体实现方法
      doInterface()
    {
        // TODO: Implement doInterface() method.
        return "使用算法An";
    }
}


*
 * ConcreteStrategyB.php(具体策略类)
 * Class ConcreteStrategyB
 class ConcreteStrategyB *
     * 算法B具体实现方法
     return "使用算法Bn"*
 * Class Context
  Context
{
    private $strategy;

    function __construct(Strategy )
    {
        $this->strategy = ;
    }

    *
     * 根据具体的策略对象,调用相应的算法的方法
      getInterface()
    {
        return $this->strategy->doInterface();
    }
}

客户端调用:

 算法A
$strategyA = new Context(new ConcreteStrategyA());
echo $strategyA->getInterface();
echo '<br>';
 算法B
$strategyB =  ConcreteStrategyB());
$strategyB->getInterface();

结果:

使用算法A 
使用算法B

?

总结:

  • 策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。
  • 策略模式的 Strategy 类层次为 Context 定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功能。
  • 策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读