PHP策略模式定義與用法
策略模式屬於對象的行為模式。其用意是針對一組算法,將每個算法封裝到具有共同接口的獨立的類中,從而使得它們可以相互替換。下面是小編分享的PHP策略模式定義與用法,一起來看一下吧。
策略模式中主要角色
這個模式設計到三個角色:
環境角色(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學習10個基礎知識總結
PHP學習過程中,必須要掌握基礎的知識點,以下是小編為大家搜索整理的PHP學習10個基礎知識總結,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!PHP10個小基礎知識總結1,在HTML嵌入PHP腳本有三種辦法:以下為引用的內容:<scriptlanguage="PHP">//嵌...
-
PHP數組長度的技巧
PHP程序開發快,運行快,技術本身學習快。嵌入於HTML:因為PHP可以被嵌入於HTML語言,它相對於其他語言。編輯簡單,實用性強,更適合初學者。以下是小編為大家搜索整理的PHP數組長度的技巧,希望能給大家帶來幫助!更多經常內容請及時關注我們應屆畢業生考試網!在php中獲取數...
-
用PHP實現文件上傳二法
PHP(HypertextPreprocessor)是一種HTML內嵌式的語言(類似IIS上的ASP)。而PHP獨特的語法混合了C、Java、Perl以及PHP式的新語法。它可以比CGI或者Perl更快速的執行動態網頁。除此之外,用PHP寫出來的Web後端CGI程序,可以很輕易的移植到不同的系統平台上。我們在做...
-
作為程序員必知的16個最佳PHP庫
PHP是一種功能強大的web站點腳本語言,通過PHP,web網站開發者可以更容易地創建動態的引人入勝的web頁面。開發人員可以使用PHP代碼與一些網站模板和框架來提升功能和特性。然而,編寫PHP代碼是一個繁瑣又耗時的過程。為了縮短開發時間,開發人員可以用PHP庫替代編寫代...