策略模式-代碼

策略模式

定義一族算法類,將每一個算法分別封裝起來,讓它們能夠互相替換。策略模式可使算法的變化獨立於使用它們的客戶端 (這裏的客戶端代指使用算法的代碼)算法

策略模式分爲三部分 策略的定義、建立、使用bash

策略定義:

interface Strategy
{

}

class StrategyA implements Strategy
{
    //策略A
}

class StrategyB implements Strategy
{
    //策略B
}
複製代碼

策略建立:

class StrategyFactory
{
    public function getStrategy($type): Strategy
    {
        if ($type == "a") {
            return new StrategyA();
        }
        
        return new StrategyB();
    }
}
複製代碼

策略使用:

class OrderService
{
    public function SubOrder($order)
    {
        $strategyType = $order['strategyType'];
        $strategy = StrategyFactory::getStrategy($strategyType);
        //$strategy->doSomething();
    }
}
複製代碼

進一步優化

在策略建立時, 若是你想真正的徹底消除, 能夠在策略建立實現map表, 根據map表查找進行對象建立. 這時候須要權衡利弊。markdown

相關文章
相關標籤/搜索