设计模式之策略模式
小王在和同事正在吹牛时,领导过来了,小王啊,你又在吹牛了?别吹了,干点正活,下周要去春游,你给出几种方案。小王一听去旅游,屁颠屁颠地去干活了。
方案啊,我早想好了,就是把几种方案封装下,让领导抉择。这个其实就是一个设计模式,叫做策略模式。
策略模式(Strategy Pattern):定义一组算法,将每个算法封装起来,并且使他们之间可以互换。策略模式是一个简单的模式也叫做政策模式。
策略模式通用类图
几个角色说明:
1、Context角色,上下文角色,封装算法对高层屏蔽,高层模块只用访问Context。
2、Strategy抽象策略角色,算法家族的抽象,通常为一个接口。
3、ConcreteStrategy具体策略角色,具体的算法。
抽象策略和具体策略代码如下:
策略类
下面对策略的封装,就是Context角色,看下通用的代码:
Context角色
简单的场景类代码如下
简单的场景类代码如下
策略模式的主要优点如下。策略模式提供了一系列的可供重用的算法族,并且算法之间可以相互替换
策略模式避免了多重条件判断,我们通常写的if-else语句可以用策略模式优化。
扩展性好,加个算法只要实现接口就行,很明显的优点
其主要缺点如下。客户端必须理解所有策略算法的区别,以便适时选择恰当的算法类。
策略模式造成很多的策略类。
现在的客户端还是和策略有依赖,我们可以用工厂,或者用策略枚举来减少耦合。实现代码如下:
策略枚举