什么场景要使用策略模式,什么场景不能使用?

简介: 如果,让我来设计,我最先想到的就是策略模式。另外,我把往期面试题解析的配套文档我已经准备好,想获得的可以在我的煮叶简介中找到。那么什么场景要使用策略模式,什么场景又不应该使用策略模式呢?我们可以先来看官方对策略模式的定义。

滴,老年卡;滴,学生卡;滴正常卡。我们在坐公交车的时候啊,这个场景每天都在上演。那如果,让你来设计这样一套刷卡的结算逻辑,你最先想到的是用什么设计模式呢?


如果,让我来设计,我最先想到的就是策略模式。另外,我把往期面试题解析的配套文档我已经准备好,想获得的可以在我的煮叶简介中找到。那么什么场景要使用策略模式,什么场景又不应该使用策略模式呢?我们可以先来看官方对策略模式的定义。

1、官方定义

官方原文是:

Define a family of algorithms, encapsulate each one, and make them interchangeable.

翻译过来就是:

将定义的算法家族分别封装起来,让它们之间可以互相替换,从而让算法的变化不会影响到使用算法的用户,

2、如何理解

看上去,很抽象比较难理解。这里提到三个关键点,一个是封装,二是可以相互替换,三是就算算法变化也不能影响用户的使用。

那对照,前面的公交车刷卡的场景,每种卡的优惠折扣都不一样,并且也结算方式都不一样,但是每种卡可以相互交换使用。比如,增加一个卡种,残疾人卡,只需要重新增加一种折扣就行了,后续继续扩展其他卡种,也不影响已经有卡的用户使用。

在日常开发中,使用策略模式的场景还非常多,比如支付时对支付方式的选择、出行时,对交通工具的选择,等等等等。

3、使用建议

那策略模式适合在哪些场景下使用呢?

需要经常自由切换执行逻辑和规则的场景,就非常适合用策略模式,可以屏蔽算法规则之间的差异,交给用户选择,也可以减少程序中大篇幅的 if...else...判断。比如Spring源码中的Resource资源类,JDK源码中的Comparator类,都是策略模式的应用。

哪些场景下又不适合使用策略模式呢?

如果两种逻辑之间关联性本来就比较大,而且变化也比较快。这种就情况,就算if...else...再多,也不适合用策略模式。比如,每天都有促销活动,价格每天都在浮动,这种情况就不适合使用策略模式。

最后,一句总结策略模式就是把选择权交给用户。如果我的分享对你有帮助,关注我,面试不再难!

相关文章
|
2月前
|
设计模式 算法 搜索推荐
策略模式的小记
本文介绍了策略模式的概念、结构和使用场景,并通过支付系统的例子展示了如何使用策略模式来动态选择不同的支付策略,包括定义支付策略接口、实现具体的支付策略类、创建上下文类以及在客户端动态选择支付策略。
策略模式的小记
|
6月前
|
算法 数据安全/隐私保护
行为型 策略模式
行为型 策略模式
34 1
|
前端开发
策略模式
策略模式
78 0
|
设计模式 算法
策略模式详细介绍
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列的算法,并将每个算法封装到具有共同接口的独立类中,使得它们可以互相替换。策略模式可以让算法的变化独立于使用它的客户端。
122 0
|
算法 测试技术 C#
C#策略模式
C#策略模式
70 0
|
设计模式 前端开发
关于策略模式我所知道的
关于策略模式我所知道的
87 0
|
算法 程序员 开发工具
简单说说我对策略模式的了解
简单说说我对策略模式的了解
87 0
|
设计模式 算法
我学会了,策略模式
策略模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
123 0
我学会了,策略模式