策略模式

策略模式

一般来说,使用设计模式时,首先考虑“什么会导致重新设计”?然后要避免那些导致重新设计的因素。
设计模式的主要原则之一是封装变化的内容。大部分情况下,对于不同类别的请求,需要有不同的算法来实现。这时候策略模式就派上用场了。

UML类图

策略模式

图 8-1 策略模式

关于策略和状态设计模式
类图上来看,策略模式和状态模式的参与者非常相似,场景的参与者都与一个接口有聚合关系。状态模式中的接口是State,策略模式中的接口是Strategy。区别是:

表8-1 策略模式和状态模式的区别

模式变化的因素上下文
状态状态维护子类当前状态的一个实例
策略算法配置为具体策略对象,封装的算法

请注意:
1.尽量不要加条件语句,策略模式不需要使用条件语句来选择所需的行为。不同的任务由不同的具体策略来吹,因为客户通过上下文请求具体策略,它必须知道有哪些可用的策略。这不是说客户选择过程中不能使用条件语句,而是说条件语句不是上下文的一部分。
2.算法族 任何依赖于一组特定行为的项目都可以转换为一种策略模式,将那些行为封装策略。

适用场景

需要多个不同算法处理的时候,并且客户端预先知道具体策略类型的情况下,可以使用策略模式。

代码示例

代码地址:https://github.com/lemon2015/design-mode/tree/master/Strategy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值