PHP設計模式之策略模式
阿新 • • 發佈:2017-07-21
lang 女裝 keyword 種類 tty protect 電子產品 number 添加
1.概念
策略模式:將一組特定的行為和算法封裝成類。以適應某些特定的上下文環境,這樣的模式就是策略模式
2.功能
使用策略模式實現Ioc, 依賴倒置, 控制反轉
3.舉例
假如一個電商站點系統,針對不同的人群要跳轉到不同的商品類目。而且全部廣告位展示不同的廣告
4.要解決的問題
1.不會由於上下文的改變而改變代碼(傳統都是使用
if
else
來推斷)
2.假設新添加一種類型的用戶,僅僅須要添加一種策略就好了,不須要在代碼中if
else
裏面在繼續加入邏輯
3.不同的地方僅僅須要運行不同的策略就好了,這樣就可以解決這個問題
4.從硬編碼到解耦的使用
5.最基本的是攻克了程序中的分支邏輯
5.實戰代碼展示
5.1 聲明策略的接口文件
interface UserStrategy {
function showAd();
function showCategory();
}
5.2定義女性用戶的策略
class FemaleUserStrategy implements UserStrategy {
function showAd()
{
echo "2014新款女裝";
}
function showCategory()
{
echo "服裝";
}
}
5.3定義男性用戶的策略
class MaleUserStrategy implements UserStrategy {
function showAd()
{
echo "IPhone6";
}
function showCategory()
{
echo "電子產品";
}
}
6. 頁面展示與使用
class Page
{
//保存策略對象
protected $strategy;
//首頁信息輸出
function index(){
//傳統寫法,與輸出
if (isset($_GET[‘famale‘])) {
echo ‘女性‘;
}else if (isset($_GET[‘famale‘])) {
echo ‘男性‘;
}
//假設新增了業務邏輯後面會非常多的 if else
//策略模式的輸出
echo $this->strategy->showAd();
echo ‘<br>‘;
echo $this->strategy->showCategory();
}
//策略模式來解決,註冊策略
function setStrategy(UserStrategy $strategy){
$this->strategy = $strategy;
}
}
//運行
$page = new Page;
//這裏依據實際上下文的環境
if (isset($_GET[‘famale‘])) {
$strategy = new FemaleUserStrategy();
}else if (isset($_GET[‘male‘])) {
$strategy = new MaleUserStrategy();
}
//使依賴關系反轉,終於運行在使用關系綁定,輸出結果(攻克了傳統寫法的耦合問題)
$page->setStrategy($strategy);
$page->index();
PHP設計模式之策略模式