PHP高级技能

php5大设计模式-策略模式

2019-05-08  本文已影响0人  AISpider

策略模式

定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。
完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。

header("Content-type:text/html;Charset=utf-8");
//抽象策略接口
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{
            # PHP Reflection API是PHP5才有的新功能,
            # 它是用来导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。
            $strategyReflection = new ReflectionClass($strategyName);

            #newInstance 用来实例化类
            $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.cnblogs.com/leedaily/p/8250158.html
http://www.cnblogs.com/yujon/p/5538464.html

上一篇 下一篇

猜你喜欢

热点阅读