美文网首页php
设计模式--策略模式

设计模式--策略模式

作者: ysp123 | 来源:发表于2019-01-27 17:30 被阅读0次

策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。
策略模式是一种对象行为型模式。

为什么需要策略模式
1.在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。
2.利用面向对象的继承和多态机制,将多个算法解耦。避免类中出现太多的if-else语句

<?php
//抽象策略接口
abstract class Strategy{
    abstract function wayToSchool();
}
//具体策略角色
class BikeStrategy extends Strategy{
    function wayToSchool(){
         echo "骑自行车去上学";
    }
}
class BusStrategy extends Strategy{
    function wayToSchool(){
         echo "乘公共汽车去上学";
    }
}
class TaxiStrategy extends Strategy{
    function wayToSchool(){
         echo "骑出租车去上学";
    }
}

//环境角色
class Context{
    private $strategy;
    //获取具体策略
    function getStrategy($strategyName){
        try{
            $strategyReflection = new ReflectionClass($strategyName);
            $this->strategy = $strategyReflection->newInstance();

        }catch(ReflectionException $e){
             $this->strategy = ""; 
        }       
    }

    function goToSchool(){
        $this->strategy->wayToSchool();
        // var_dump($this->strategy);
    }
}

//测试
$context = new Context();
$context->getStrategy("BusStrategy");
$context->goToSchool();
 ?>

相关文章

网友评论

    本文标题:设计模式--策略模式

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