前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >漫谈模式之策略模式

漫谈模式之策略模式

作者头像
孟君
发布2023-03-24 09:34:10
6430
发布2023-03-24 09:34:10
举报
文章被收录于专栏:孟君的编程札记

今天,我们来分享行为型模式的另外一个成员:策略模式

策略模式是一种行为型模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,使得算法可以独立于使用它们的客户端变化而变化。策略模式使得算法的变化可以独立于使用算法的客户端。

在开始本文之前,我们先来看下生活中的的一些场景:

场景1:出行

比如出行,可以采用公共汽车出行,可以打的出行,可以自驾出行,也可以骑自行车出行等等。我们可以根据天气、距离、时间紧迫等因素决定采用哪一种方式出行。

场景2:购物车支付

比如购物支付,可以采用信用卡、银联、支付宝、微信等方式支付,每种都有各自的算法和行为。

再如采用不同策略完成计费、完成排序等都是在多个现实应用可以找到的。在这些场景中将算法封装在对象中,这样可以方便地指定和改变一个对象所使用的算法这个就是我们要聊的策略模式要做的事情。

策略模式的基本介绍

意图

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

结构

策略模式的基本结构如下:

图片
图片

Strategy (策略)

定义所有支持的算法的公共接口,通常由一个接口或抽象类实现。

ConcreteStrategy (具体策略)

以Strategy接口实现某具体算法。

Context (上下文)

持有一个对Strategy对象的引用

策略模式的示例

本文给出一个发短信的示例,平台需要根据不同的省份和场景,通过不同的网关发送短信。

发送短信的方式有如下几种方式:

  • 通过自主平台短信网关发送短信
  • 通过省级短信网关发送短信
  • 通过信息调度中心10086发送短信

接下来,根据策略模式的结构完成一个简单的示例:

MessageStrategy (Strategy)

图片
图片

三个具体策略(ConcreteStrategy)

图片
图片

MessageContext (Context)

图片
图片

模拟一下根据不同策略来完成简单的短信发送

图片
图片

输出结果

图片
图片

这样,一个使用策略完成不同通道发送短信的示例就完成了。

同样,如果使用不同策略(比如冒泡、快速排序以及归并排序等)完成排序,或者使用不同的本地缓存实现缓存的存和取(比如,ConcurrentHashMap和Guava LocalCache ... ..)

一个排序策略的例子

策略接口和具体策略

图片
图片

策略上下文

图片
图片

客户端Client

图片
图片

运行结果

图片
图片

小结

策略模式上下文的作用

上下文在策略模式中的作用是将客户端与具体策略解耦,上下文通常包含一个对策略接口的引用,这使得它可以调用任何实现该接口的具体策略。上下文还包含一个方法来设置当前要使用的具体策略,这使得客户端可以根据需要轻松地更改算法的行为。

适用场景

策略模式是一种行为模式,其是对算法的封装,是把使用算法的责任和算法本身分割开,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一些系列的策略类里面,作为一个抽象策略的子类。本模式使得算法可独立于使用它的客户而变化。

在下面的情况下应当考虑使用策略模式:

  1. 许多相关的类仅仅行为有异,使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
  2. 一个系统的算法使用的数据不可以让客户知道。策略模式可以避免客户端涉及到不必要接触到的复杂和只与算法有关的数据。
  3. 如果一个对象有很多的行为,如果不使用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。此时,使用策略模式,把这些行为转移到相应的具体策略类里面,就可以避免使用难以维护的多重条件选择语句,并体现面向对象设计的概念

状态模式 vs. 策略模式

状态模式

将一群行为封装到状态类中,主类的当前状态在状态集合中游走,随着时间的流逝,主类的行为不断变化,但这对客户端而言完全是透明的,而策略模式需要客户端明确所有策略,以指明一个具体的策略。

策略模式

定义一组 算法实现,实现之间可以任意替换,而且可以在运行时动态的选择任意一种实现。需要客户端清楚所有的策略以选择合适的策略。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 策略模式的基本介绍
  • 策略模式的示例
  • 小结
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档