工作中设计模式之策略模式
策略模式就类似于c++中的多态,同一行为有不同的实现。
在业务上会有这个场景,比如获取列表,不同的数据源获取不同的列表。那么可能会有这个实现
$upstreamType = $params['upstream_type'];
$list = [];
switch ($upstreamType) {
case 1:
$list = $this->list1**(**);
break;
case 4:
$list = $this->list4**(**);
break;
default:
}
具体的实现都在switch里或者if里面,如果后续再新增其他类型就要继续在switch里加方法。这其实就违背了开闭原则。所以,怎么才能就算新增类型也不用修改原有代码?策略模式就上场了。
首先不同的类型都有同一个行为,就是获取列表。不同类型有自己的规则,至于它怎么实现不用关心。所以可以通过一个接口类来封装相应的行为,通过继承接口类来具体的实现。这样行为的具体实现都在不同的类里,降低了耦合。
可以和工厂模式结合使用,由工厂来决定具体使用哪个类,只需要传类型即可。