策略模式
定义一族算法类,将每个算法分别封装起来,让它们可以互相替换。策略模式可以使算法的变化独立于使用它们的客户端 (这里的客户端代指使用算法的代码)
策略模式分为三部分 策略的定义、创建、使用
策略定义:
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表查找进行对象创建. 这时候需要权衡利弊。