java 策略模式例子_设计模式之策略模式(Java实现例子说明)

125d12b899552ace623c404f8688638d.png

设计模式之策略模式

小王在和同事正在吹牛时,领导过来了,小王啊,你又在吹牛了?别吹了,干点正活,下周要去春游,你给出几种方案。小王一听去旅游,屁颠屁颠地去干活了。

方案啊,我早想好了,就是把几种方案封装下,让领导抉择。这个其实就是一个设计模式,叫做策略模式。

策略模式(Strategy Pattern):定义一组算法,将每个算法封装起来,并且使他们之间可以互换。策略模式是一个简单的模式也叫做政策模式。

e61827e455fb8ab5e1c04f9b85f934ef.png

策略模式通用类图

几个角色说明:

1、Context角色,上下文角色,封装算法对高层屏蔽,高层模块只用访问Context。

2、Strategy抽象策略角色,算法家族的抽象,通常为一个接口。

3、ConcreteStrategy具体策略角色,具体的算法。

抽象策略和具体策略代码如下:

f5e49722fc9dc13dc8b9856de51cbdd8.png

策略类

下面对策略的封装,就是Context角色,看下通用的代码:

d05449d397a3db3e4dd554b6bc7f2d98.png

Context角色

简单的场景类代码如下

db7cb5880899e3bb067dbbd986c49ecc.png

简单的场景类代码如下

策略模式的主要优点如下。策略模式提供了一系列的可供重用的算法族,并且算法之间可以相互替换

策略模式避免了多重条件判断,我们通常写的if-else语句可以用策略模式优化。

扩展性好,加个算法只要实现接口就行,很明显的优点

其主要缺点如下。客户端必须理解所有策略算法的区别,以便适时选择恰当的算法类。

策略模式造成很多的策略类。

现在的客户端还是和策略有依赖,我们可以用工厂,或者用策略枚举来减少耦合。实现代码如下:

65790f6640d090052680577017cc1ff9.png

策略枚举

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值