23种设计模式——策略

策略模式的优点:

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

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

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

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

策略模式的结构图:

代码演示

";
    }

    public function eat()
    {
        echo "I had rice at noon 
"; } } class Noodles extends Lunch { public function buy() { echo "It cost 12 yuan
"; } public function eat() { echo "I had noodles at noon
"; } } 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种设计模式——策略)