簡介:
策略模式又叫做政策模式,用于如何組織和呼叫演算法的,是屬于行為型模式的一種,
策略模式需要三個角色構成:
- Context 封裝角色:也叫做背景關系角色,起承上啟下封裝作用,屏蔽高層模塊對策略、演算法的直接訪問,封裝可能存在的變化,
- Strategy 抽象策略角色:通常為介面,指定規則,
- ConcreteStrategy 具體策略角色:實作抽象策略中的操作,該類含有具體的演算法,
適用場景:
- 優化單元測驗,每個測驗都有自己獨特的演算法,可利用策略模式自定義實作,
- 實作同一類問題的不同解決方案的場景,
優點:
演算法可以通過引數自由切換,
方便擴展,增加策略只需要實作介面就行了,
缺點:
增加類數量,
其它:
與工廠模式的對比:
工廠模式是用來創建物件的,策略模式是如何組織、呼叫這些演算法,結果一樣但是初衷不同,
代碼:
//定義演算法介面 抽象策略角色
interface CalcInterface {
public function calc($num1, $num2);
}
//定義加法類 具體策略角色
class Add implements CalcInterface {
public function calc($num1, $num2) {
return $num1 + $num2;
}
}
//定義減法類 具體策略角色
class Sub implements CalcInterface {
public function calc($num1, $num2) {
return $num1 - $num2;
}
}
//背景關系角色 承上啟下
class Context {
private $strategy;
public function __construct(CalcInterface $strategy) {
$this->strategy = $strategy;
}
public function run($num1, $num2) {
return $this->strategy->calc($num1, $num2);
}
}
//呼叫端==========================================================
echo (new Context(new Add()))->run(1,2);
echo (new Context(new Sub()))->run(1,2);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/523886.html
標籤:其他
下一篇:資料結構基礎—陣列和廣義表
