重学设计模式 - Strategy模式

1、Strategy模式简介

《设计模式》一书中对Stragety模式的意图是这样叙述的:

定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。Strategy模式使算法可独立于使用它的客户而变化。 

Strategy模式以下面几条原则为基础:

1)  对象都具有职责;

2)  这些职责不同的具体实现是通过多态的使用完成的;

3)  概念上相同的算法具有多个不同的实现,需要进行管理。

2、Strategy模式关键特征

 

意图

可以根据所处上下文,使用不同的业务规则或算法

问题

对所需算法的选择取决于发出请求的客户或者要处理的数据。如果只有一些不会变化的算法,就不需要Strategy模式。

解决方案

将对算法的选择和算法的实现相分离。允许根据上下文进行选择。

参与者与协作者

1、  Strategy指定了如何使用不同的算法。

2、  ConcreteStrategy实现了这些不同的算法。

3、  Context通过类型为Strategy的引用使用具体的ConcreteStrategyStrategyContext相互作用以实现所选的算法(有时候Strategy必须查询Context)。Context将来自Client的请求转发给Strategy

效果

1、  Strategy模式定义了一系列的算法。

2、  可以不使用switch语句或条件语句

3、  必须以相同的方式调用所有的算法(它们必须拥有相同的接口)。个ConcreteStrategyContext之间的相互作用可能需要在Context中加入获取状态的方法。

实现

让使用算法的类(Context)包含一个抽象类(Strategy),该抽象类拥有一个抽象方法指定如何调用算法。每个派生类按需要实现算法。

(在原型Strategy模式中,选择所用具体实现的职责有Client对象承担,并转给Strategy模式的Context对象)

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值