策略模式(Strategy Pattern):定義一系列算法,將每一個算法封裝起來,并讓它們可以相互替換。策略模式讓算法獨立于使用它的客戶而變化,也稱為政策模式(Policy)。
策略模式是一種對象行為型模式。
為什么需要策略模式
1.在有多種算法相似的情況下,使用 if...else 所帶來的復雜和難以維護。
2.利用面向對象的繼承和多態(tài)機制,將多個算法解耦。避免類中出現太多的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 "騎出租車去上學";
}
}
//環(huán)境角色
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();
?>