带你读《2022技术人的百宝黑皮书》——浅析设计模式2 —— 策略模式(4)

简介: 带你读《2022技术人的百宝黑皮书》——浅析设计模式2 —— 策略模式

带你读《2022技术人的百宝黑皮书》——浅析设计模式2 —— 策略模式(3)

https://developer.aliyun.com/article/1262319?groupCode=taobaotech



优缺点及适用场景

优点

1. 具体策略类之间可自由切换,由于具体策略类都实现同一个抽象策略接口,所以它们之间可以自由切换。

2. 支持“开闭原则”,扩展增加一个新策略时只需添加一个具体策略类即可,基本不需要改变原有的代码。

3. 避免使用多重条件选择语句(if else),充分体现面向对象设计思想。


缺点

1. 客户端必须知道所有的具体策略类,并理解不同具体策略的区别、自行决定使用哪一个策略类。

2. 策略模式将产生很多具体策略类,在一定程度上增加了系统中类的个数(可通过使用享元模式在一定程度上减少  对象数量)。


适用场景


1. 一个系统需要动态地在几种算法中选择一种时,可将每个算法封装到具体策略类中。

2. 一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现,可将每个条件分支移入它  们各自的策略类中以代替这些条件语句,就能避免使用难以维护的多重条件选择语句,并体现面向对象涉及的概  念。

3. 系统中各算法彼此完全独立,且要求对客户隐藏具体算法的实现细节,提高算法的保密性与安全性。

4. 多个类只区别在表现行为不同,可以使用策略模式,在运行时动态选择具体要执行的行为。


总结


策略模式是一个比较容易理解和使用的设计模式,它仅封装算法,方便新算法插入系统中、老算法从系统中退休。 本文在分析策略模式的缺点时提到,策略模式并不决定在何时使用何种算法,算法选择由客户端来决定,虽然这在 一定程度上提高了系统的灵活性,但客户端需要理解所有具体策略类之间的区别,以便选择合适的算法,增加了客 户端的使用难度。


上一篇文章提到,策略模式和工厂模式有一定相似之处,在于它们的模式结构,因此有时候会让人混淆不清。实际 上,这两者之间存在较多差异:工厂模式是创建型模式,作用是创建对象,它关注对象如何创建,主要解决的是资 源的统一分发,将对象的创建完全独立出来,让对象的创建和具体的使用客户无关;策略模式是行为型模式,作用 是让一个对象在许多行为中选择一种行为,它关注行为如何封装,通过定义策略族来实现策略的灵活切换与扩展, 并让策略的变化独立于使用策略的客户。


另外,很多场景下策略模式和工厂模式可以结合使用,共同发挥优势起到相辅相成的作用。比如,策略模式的缺点 之一是用户必须清楚所有的具体策略算法,这样具体策略难免暴露出去,并且要由上层模块初始化,这与迪米特法 则相悖(最少知识原则),而上层模块和底层模之间的解耦,可以让工厂模式来完成。两者结合之后,对于上层模 块而言不需要知道每种具体策略,只要通过 Context 就可以实现策略模式。(至于如何结合策略模式和工厂模式, 大家可以上网搜索哦,已经有很多大佬给出了具体的案例和代码示例,这里就不再赘述了)


下篇预告


至此,我们已经学习了两种类型的设计模式,即创建型模式(工厂模式)和行为型模式(策略模式),看过文章的 朋友们一定知道,每篇文章开头都会对 23 种经典的设计模式进行罗列,其中划分出三大类设计模型:创建型模 式、结构型模式和行为型模式。不知道你们是否和我一样好奇结构型模式有什么特点和适用场景?实际生产中最常 用的结构型模式是什么?下一篇文章我们一起认识和了解结构型模式,敬请期待!


团队介绍


我们是大聚划算技术团队。


使命:让货品和心智运营变得高效且有确定性!


愿景:与运营、产品合力,打造最具价格优惠心智的购物入口,最具爆发性的营销矩阵。


职责:负责支持聚划算、百亿补贴、天天特卖等业务。我们聚焦优惠和选购体验,通过数智化驱动形成更有效率和 确定性的货品运营方法论,为消费者提供精选和极致性价比的商品,为商家提供更具爆发确定性的营销方案。


这是一支极具业务 sense,又具备复杂业务系统架构和设计经验的团队。

相关文章
|
1月前
|
设计模式 前端开发 JavaScript
【JavaScript 技术专栏】JavaScript 设计模式与实战应用
【4月更文挑战第30天】本文探讨JavaScript设计模式在提升开发效率和代码质量中的关键作用。涵盖单例、工厂、观察者、装饰器和策略模式,并通过实例阐述其在全局状态管理、复杂对象创建、实时数据更新、功能扩展和算法切换的应用。理解并运用这些模式能帮助开发者应对复杂项目,提升前端开发能力。
|
30天前
|
设计模式 算法 Java
Java一分钟之-设计模式:策略模式与模板方法
【5月更文挑战第17天】本文介绍了策略模式和模板方法模式,两种行为设计模式用于处理算法变化和代码复用。策略模式封装不同算法,允许客户独立于具体策略进行选择,但需注意选择复杂度和过度设计。模板方法模式定义算法骨架,延迟部分步骤给子类实现,但过度抽象或滥用继承可能导致问题。代码示例展示了两种模式的应用。根据场景选择合适模式,以保持代码清晰和可维护。
24 1
|
1月前
|
设计模式 算法 Java
小谈设计模式(3)—策略模式
小谈设计模式(3)—策略模式
|
8天前
|
设计模式 算法 架构师
设计模式-策略模式详解
系统要求使用算法的客户不应该知道其操作的数据时,可使用策略模式来隐藏与算法相关的数据结构。
333 0
|
1月前
|
设计模式 算法
【设计模式】阿里终面:你觉得这个例子是策略模式吗?
【设计模式】阿里终面:你觉得这个例子是策略模式吗?
20 1
|
1月前
|
设计模式 算法
大话设计模式(2)——策略模式
大话设计模式(2)——策略模式
22 1
|
1月前
|
设计模式 JavaScript 算法
js设计模式-策略模式与代理模式的应用
策略模式和代理模式是JavaScript常用设计模式。策略模式通过封装一系列算法,使它们可互换,让算法独立于客户端,提供灵活的选择。例如,定义不同计算策略并用Context类执行。代理模式则为对象提供代理以控制访问,常用于延迟加载或权限控制。如创建RealSubject和Proxy类,Proxy在调用RealSubject方法前可执行额外操作。这两种模式在复杂业务逻辑中发挥重要作用,根据需求选择合适模式解决问题。
|
1月前
|
设计模式
LabVIEW状态机设计模式技术手册和练习
LabVIEW状态机设计模式技术手册和练习
24 0
|
1月前
|
设计模式 算法 Java
Java 设计模式:探索策略模式的概念和实战应用
【4月更文挑战第27天】策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在 Java 中,策略模式通过定义一系列的算法,并将每一个算法封装起来,并使它们可以互换,这样算法的变化不会影响到使用算法的客户。
31 1
|
1月前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式