美文网首页
23种设计模式——策略

23种设计模式——策略

作者: 云水之遥 | 来源:发表于2019-07-25 15:10 被阅读0次

策略模式的优点:

策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法的公共功能。策略模式的另一个优点是简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。

说了这么多,策略模式究竟解决的是什么问题呢?

策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。

在基本策略模式中,选择所用具体实现的职责由客户端对象承担,并转给策略模式的Context对象。

策略模式的结构图:

代码演示

<?php
/**
 * 有一个抽象类约束行为
 * 有多个实现类继承抽象类处理具体逻辑
 * 有策略分配类做转发
 */
abstract class Lunch
{
    abstract function buy();

    abstract function eat();
}


class Rice extends Lunch
{
    public function buy()
    {
        echo "It cost 8 yuan </br>";
    }

    public function eat()
    {
        echo "I had rice at noon </br>";
    }
}

class  Noodles extends Lunch
{
    public function buy()
    {
        echo "It cost 12 yuan </br>";
    }

    public function eat()
    {
        echo "I had noodles at noon </br>";
    }
}

class Choose
{
    private $strategy;

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

    public function buy()
    {
        $this->strategy->buy();
    }

    public function eat()
    {
        $this->strategy->eat();
    }
}

$today = new Choose(new Noodles());
$today->buy();
$today->eat();

$yesterday = new Choose(new Rice());
$yesterday->buy();
$yesterday->eat();

输出结果

image.png

相关文章

网友评论

      本文标题:23种设计模式——策略

      本文链接:https://www.haomeiwen.com/subject/kcyhrctx.html