本文實例講述了PHP策略模式定義與用法。分享給大家供大家參考,具體如下:
概述
策略模式屬于對象的行為模式。其用意是針對一組算法,將每個算法封裝到具有共同接口的獨立的類中,從而使得它們可以相互替換。策略模式使得算法可以在不影響到客戶端的情況下發生變化
UML圖
策略模式中主要角色
這個模式設計到三個角色:
環境角色(Context):持有一個Strategy的引用
抽象策略(Strategy)角色:這是一個抽象角色,通常由一個接口或抽象類實現。此角色給出所有的具體的策略類所需的接口
具體策略(ConcreateStrategy)角色:包裝了相關的算法或行為
使用場景
假設現在要設計一個購物車系統,一個最簡單的情況就是把所有貨品的單價乘上數量,但是實際情況肯定比這個復雜。例如:對普通會員無折扣,對中級會員提供8折優惠,對高級會員提供7折優惠。
根據上述描述,貨品價格是根據以下幾個算法中的一個進行的:
對普通會員無折扣
對中級會員8折
對高級會員7折
UML圖
實現代碼:
<?php /** * 策略抽象類 * @author wzy * */ interface Strategy { public function calPrice ($price); } /** * 普通會員策略類 * * @author wzy * */ class PrimaryStrategy implements Strategy { public function calPrice ($price) { echo "普通會員無折扣"; return $price; } } /** * 中級會員策略類 * * @author wzy * */ class MiddleStrategy implements Strategy { public function calPrice ($price) { echo "中級會員8折優惠"; return $price * 0.8; } } /** * 高級會員策略類 * * @author wzy * */ class HighStrategy implements Strategy { public function calPrice ($price) { echo "高級會員7折優惠"; return $price * 0.7; } } /** * Context實現類 * * @author wzy * */ class Price { /** * 具體的策略類對象 * * @var object */ private $strategyInstance; /** * 構造函數,傳入一個具體的策略對象 * * @param object $instance */ public function __construct ($instance) { $this->strategyInstance = $instance; } /** * 計算貨品的價格 * * @param double $price */ public function quote ($price) { return $this->strategyInstance->calPrice($price); } } /** * 客戶端操作 */ $high = new HighStrategy(); $priceClass = new Price($high); $price = $priceClass->quote(400); echo $price; ?>
回顧策略模式
策略模式的重心不是如何實現算法,而是如何組織、調用這些算法,從而讓程序結構更靈活,具有更好的擴展性和維護性
算法的平等性
策略模式一個很大的特點就是各個策略算法的平等性。對于一系列具體的策略算法,大家的地位是一樣的,這樣才能實現算法之間的互相轉換
運行時策略的唯一性
運行期間,策略模式在每一個時刻只能使用一個具體的策略實現對象,雖然可以動態地在不同的策略實現中切換,但是同時只有一個
更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP基本語法入門教程》、《PHP網絡編程技巧總結》、《PHP數組(Array)操作技巧大全》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。