電商類的項目娇钱,經(jīng)常會有各種優(yōu)惠活動,比如:滿XX減X 绊困;全場X折等等文搂。
比較直接的做法是在代碼里面各種if else 或者 switch case等。每次新增或者修改優(yōu)惠策略秤朗,都可能會影響到其他的代碼煤蹭,耦合比較嚴(yán)重。
現(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();
策略模式是一種行為設(shè)計模式,總統(tǒng)的思想也比較簡潔作谭,并不難以理解稽物。
在上面的代碼中還存在一個問題:客戶端要明確的知道每個策略類的名稱才能使用,這個是不太合理的折欠,因此在實際使用中贝或,我們往往還會和簡單工廠結(jié)合,使客戶端調(diào)用起來更加方便锐秦。