策略模式是指有一定行動內容的相對穩定的策略名稱。策略模式在古代中又稱“計策”,簡稱“計”,如《漢書·高帝紀上》:“漢王從其計”。這裡的“計”指的就是計謀、策略。策略模式具有相對穩定的形式,如“避實就虛”、“出奇制勝”等。一定的策略模式,既可套用於戰略決策,也可套用於戰術決策;既可實施於大系統的全局性行動,也可實施於大系統的局部性行動。
基本介紹
- 中文名:策略模式
- 外文名:Pattern:Strategy
- 抽象策略角色:由一個接口或者抽象類實現
- 具體策略角色:包裝了相關的算法和行為
- 環境角色:持有一個策略類的引用
簡介
- 定義了一組算法(業務規則);
- 封裝了每個算法;
- 這族的算法可互換代替(interchangeable)。
組成
套用場景
優缺點
優點
缺點
實現:
代碼實現:
<?php/***策略模式*定義一系列的算法,把每一個算法封裝起來,並且使它們可相互替換。*本模式使得算法可獨立於使用它的客戶變化*//***出行旅遊*/interface TravelStrategy{ public function travelAlgorithm();}/***具體策略類(ConcreteStrategy)*1:乘坐飛機*/class AirPlanelStrategy implements TravelStrategy{ public function travelAlgorithm(){ echo"travelbyAirPlain","<BR>\r\n"; }}/***具體策略類(ConcreteStrategy)*2:乘坐火車*/class TrainStrategy implements TravelStrategy{ public function travelAlgorithm(){ echo"travelbyTrain","<BR>\r\n"; }}/***具體策略類(ConcreteStrategy)*3:騎腳踏車*/class BicycleStrategy implements TravelStrategy{ public function travelAlgorithm(){ echo"travelbyBicycle","<BR>\r\n"; }}/****環境類(Context):*用一個ConcreteStrategy對象來配置。*維護一個對Strategy對象的引用。可定義一個接口來讓Strategy訪問它的數據。*算法解決類,以提供客戶選擇使用何種解決方案:*/class PersonContext{ private$_strategy = null; public function __construct(TravelStrategy$travel){ $this->_strategy=$travel; } /** *旅行 */ public functionset TravelStrategy(TravelStrategy$travel){ $this->_strategy=$travel; } /** *旅行 */ public function travel(){ return$this->_strategy->travelAlgorithm(); }}//乘坐火車旅行$person=newPersonContext(newTrainStrategy());$person->travel();//改騎腳踏車$person->setTravelStrategy(newBicycleStrategy());$person->travel();}