8.2.1 策略设计模式(The strategy design pattern)

728 篇文章 1 订阅
349 篇文章 0 订阅

8.2.1 策略设计模式(The strategy design pattern)

 

在运行时,如果应用程序需要在几种算法之间,或一种算法的不同部分之间进行选择的话,策略模式是非常有用的。一种常见的情况是,当我们的应用程序需要执行的几个任务,只在很小的子任务上是不同的。使用策略模式,对于任务的公用部分,我们只要写一次,加上参数化,子任务(原始操作)作为它的参数值。图 8.1 显示了用面向对象表示的策略模式。


图 8.1 Strategy是一个接口,有表示原始操作的方法。两个具体策略实现不同的操作,Context 类可以在这些实现之间选择

 

把任务参数化,是给它一个子任务作为参数值,有可能使策略模式在函数式编程中的看起来更清晰:它只是一个高阶函数。图 8.1 中的 Strategy 接口只有一个方法,表明它是一个简单的函数;实现它的两个类是有效的具体函数,可以使用 lambda 函数创建。

在支持函数的语言中,我们可以用适当的函数(在 C# 中的 Func 委托或 F# 中的函数类型)替换 Strategy 接口。 通常情况下,我们直接把策略作为参数值,传递给 Operation 方法。使用图 8.1 中的抽象名,我们可以写成:

 

Context.Operation(arg => { 

  //Implements the specificstrategy 

});

 

我们已经看到过这种模式在筛选列表时的示例。在这种情况下,描述条件的函数是具体的策略(我们可以使用不同的策略写出不同的筛选器),List.filter 函数或 Where 方法是相当的操作。这就是说,在支持高阶函数的语言中,可以随时用高阶函数替换策略模式。

下一个模式有点类似,但与我们前面讨论的以行为为中心的应用程序中,处理行为列表更相关。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值