設計模式之策略模式

電商類的項目,經(jīng)常會有各種優(yōu)惠活動,比如:滿XX減X ;全場X折等等。

比較直接的做法是在代碼里面各種if else 或者 switch case等。每次新增或者修改優(yōu)惠策略,都可能會影響到其他的代碼,耦合比較嚴重。

現(xiàn)在我用策略模式來實現(xiàn)這樣的需求,看看帶來的變化。

下面是代碼:

<?php

//抽象策略類
abstract class PreferentialStrategy
{
    abstract public function calculate();
}


//具體策略
class FirstStrategy extends PreferentialStrategy
{
    public function calculate()
    {
        echo '滿100減10的算法';
    }
}

class SecondStrategy extends PreferentialStrategy
{
    public function calculate()
    {
        echo '全場9折的算法';
    }
}

//環(huán)境類
class Context
{
    private $_strategy;

    public function __construct(PreferentialStrategy $_strategy)
    {
        $this->_strategy = $_strategy;
    }

    public function handle()
    {
        $this->_strategy->calculate();
    }

}

$context = new Context(new FirstStrategy());
$context->handle();

策略模式是一種行為設計模式,總統(tǒng)的思想也比較簡潔,并不難以理解。

在上面的代碼中還存在一個問題:客戶端要明確的知道每個策略類的名稱才能使用,這個是不太合理的,因此在實際使用中,我們往往還會和簡單工廠結合,使客戶端調用起來更加方便。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 設計模式基本原則 開放-封閉原則(OCP),是說軟件實體(類、模塊、函數(shù)等等)應該可以拓展,但是不可修改。開-閉原...
    西山薄涼閱讀 4,071評論 3 14
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • qcow2鏡像不同于raw鏡像只需要一條簡單的命令就可任意減小鏡像大小,用的時間長了,會發(fā)現(xiàn)qcow2鏡像已經(jīng)達到...
    劍膽琴心python閱讀 8,085評論 0 3
  • 在 UIView 中有一個autoresizingMask的屬性,它對應的是一個枚舉的值(如下),屬性的意思就是自...
    nenhall閱讀 242評論 0 0
  • 這段時間,我一直抱著頭在想,我為什么會失敗,我走到現(xiàn)在,做了很多虧本的生意,處了一些扯球蛋的人,也處了...
    青青蓮閱讀 168評論 0 0

友情鏈接更多精彩內(nèi)容