策略模式(Strategy Pattern):定義一系列算法,將每一個(gè)算法封裝起來白群,并讓它們可以相互替換入热。策略模式讓算法獨(dú)立于使用它的客戶而變化,也稱為政策模式(Policy)揪荣。
策略模式是一種對(duì)象行為型模式。
為什么需要策略模式
1.在有多種算法相似的情況下往史,使用 if...else 所帶來的復(fù)雜和難以維護(hù)仗颈。
2.利用面向?qū)ο蟮睦^承和多態(tài)機(jī)制,將多個(gè)算法解耦椎例。避免類中出現(xiàn)太多的if-else語句
<?php
//抽象策略接口
abstract class Strategy{
abstract function wayToSchool();
}
//具體策略角色
class BikeStrategy extends Strategy{
function wayToSchool(){
echo "騎自行車去上學(xué)";
}
}
class BusStrategy extends Strategy{
function wayToSchool(){
echo "乘公共汽車去上學(xué)";
}
}
class TaxiStrategy extends Strategy{
function wayToSchool(){
echo "騎出租車去上學(xué)";
}
}
//環(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);
}
}
//測(cè)試
$context = new Context();
$context->getStrategy("BusStrategy");
$context->goToSchool();
?>