策略模式-代码

702 阅读1分钟

策略模式

定义一族算法类,将每个算法分别封装起来,让它们可以互相替换。策略模式可以使算法的变化独立于使用它们的客户端 (这里的客户端代指使用算法的代码)

策略模式分为三部分 策略的定义、创建、使用

策略定义:

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表查找进行对象创建. 这时候需要权衡利弊。