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

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

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


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

1、官方定义

官方原文是:

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

翻译过来就是:

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

2、如何理解

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

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

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

3、使用建议

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

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

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

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

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

相关文章
|
1月前
|
算法 数据安全/隐私保护
行为型 策略模式
行为型 策略模式
22 1
|
10月前
|
前端开发
策略模式
策略模式
63 0
|
11月前
|
设计模式 算法
策略模式详细介绍
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列的算法,并将每个算法封装到具有共同接口的独立类中,使得它们可以互相替换。策略模式可以让算法的变化独立于使用它的客户端。
99 0
|
11月前
|
算法 测试技术 C#
C#策略模式
C#策略模式
47 0
|
设计模式 前端开发
关于策略模式我所知道的
关于策略模式我所知道的
66 0
|
算法 程序员 开发工具
简单说说我对策略模式的了解
简单说说我对策略模式的了解
68 0
|
设计模式 算法
我学会了,策略模式
策略模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
103 0
我学会了,策略模式
|
设计模式 算法 安全