1. 程式人生 > >PHP設計模式之策略模式

PHP設計模式之策略模式

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設計模式之策略模式