首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Go:使用策略模式

策略模式是一种常见行为设计模式,它能够在运行时改变对象行为。这一设计模式主要目的是定义一系列算法,并将每种算法封装起来,使得它们可以互相替换。...在这篇文章中,我们将探讨如何使用Go语言来实现策略模式,并通过一个实例进行演示。我们选择实例是一个简单数学问题:根据用户选择,我们将实现一个计算器,支持加法、减法、乘法和除法。...上下文使用了一些策略对象,该策略对象会改变上下文执行算法。...总结 策略模式为我们提供了一种方式,可以将一系列算法封装起来,并根据需要进行更换。这种方式不仅使代码更加清晰,而且也让算法更易于复用。这对于需要处理不同种类业务逻辑大型系统来说,尤为重要。...当然,每种设计模式都有其适用场景,它们并非万能。在使用设计模式时,我们应该根据实际需求和场景来选择合适模式,而不是强行套用。 希望本文能够帮助你理解策略模式,并能在实际开发中找到其应用。

12320
您找到你想要的搜索结果了吗?
是的
没有找到

使用策略模式重构ifelseifelseif

medium.com/aia-sg-techblog/refactor-if-elseif-elseif-using-strategy-design-pattern-80c51913a539 ---- 策略设计模式是一种允许在运行时选择算法行为...这种模式 定义了一系列算法 封装每种算法 使算法在该系列内可互换。 下面是策略设计模式架构,客户端将在其中与上下文进行通信。...上下文将包含对策略对象引用,这反映了另一个设计原则 “针对接口而非实现编程”。 让我们检查一下如何使用以下场景重构旧式 if else 语句。...这种设计问题在于,每当我们需要添加或修改任何传输方式时,它总是会影响业务逻辑实现。 让我们使用策略设计模式重构紧密耦合代码。...策略接口及其实现 上下文对象持有策略参考 客户端代码如下所示 优点: 添加新策略不会干扰之前任何代码。 移除/重构之前任何策略都是灵活。 易于单一测试。 ·END·

10320

项目重构--使用策略模式

,扩展性差.....真的快看不下去了.所以决定重构下.因为最近在学设计模式,仔细分析下,这不正好策略模式很像吗?...先看下策略模式组成: ——抽象策略角色: 策略类,通常由一个接口或者抽象类实现。 ——具体策略角色:包装了相关算法和行为。 ——环境角色:持有一个策略引用,最终给客户端调用。...再看下策略模式定义: 策略模式定义了一系列算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用客户而独立变化。...好,我们对策略模式稍微有了了解,那我们开始重构这段代码: 首先讲下这段代码要实现功能,他主要是刷卡功能实现,有就诊卡,银行卡,医保卡等,每种卡对应不同刷卡器,同时对应不同信息提示与背景显示等....Common.CommWindow.EndProgressBar(); return error; } } 重构后代码量减少了将近一半以上,而且更容易扩展了,可读性也高了许多^,另外这里我将接口在构造函数中使用

86690

教你如何使用策略模式

策略模式策略模式中一个类行为或者其算法在运行是可以进行改变,这种类型也可以叫做行为型模式。...场景 在一个系统里面有许多类,它们之间区别仅在于它们行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 一个系统需要动态地在几种算法中选择一种。...如果一个对象有很多行为,如果不用恰当模式,这些行为就只好使用多重条件选择语句来实现。...,如果出现新增策略,只需要实现公共出行方式接口,然后写自己逻辑就OK了。...SpringBoot中应用 接了个需求,对接第三方接口进行数据校验,每一个第三方都是一套规范,考虑到后续可扩展性,和内部统一,使用策略类进行实现。

72120

使用 map 实现策略模式

上篇文章在谈到优化代码时候,有一部分涉及到了使用策略模式优化我们代码,本篇文章将围绕策略模式谈谈自己思考~ What?...策略模式使得算法在用户使用时候能独立改变。如下图所示 ? Why ?...在软件编码中,实现策略模式需要我们定义各种策略类,但是在 go 中我们可以使用 map 来避免这一缺点,直接定义需要实现策略方法即可。...策略模式策略模式精髓是封装一组算法实现以供使用调度,golang 里面有一个很重要语法糖就是 func() 方法变量,因此,在 golang 中实现类似策略模式做法,不需要依赖于对象而进行...使用 map 来实现策略模式缺点 当然,缺点就是如果需要扩展策略,就要到增加一个 Entry,没有传统实现方式中直接扩展一个实现了策略接口对象那么方便,这两个还得看具体项目取舍,一句老话

1.7K20

使用策略模式干掉大片 if else

假设有一个OA系统,里面的一个功能根据不 同流程做不同处理,比如有合同流程,请假流程,印章申请流程,出差申请。外出流程,报销流程等等很多。...使用策略模式实现 策略模式重心:是如何实现算法,而是如何组织,调用算法,让程序更加灵活,具有更 好可维护性和扩展性。 策略模式本质:是算法分离,选择算法。...1.写一个抽象处理器来约束具体实现 也可以定义成接口,定义成抽象类是因为有一些流程公共方法可以放在抽象类中、 /** * 抽象类,用来约束具体处理流程 */ public abstract...具体思路是: 1、扫描指定包中标有@HandlerType类; 2、将注解中类型值作为key,对应类作为value,保存在Map中; 3、以上面的map作为构造函数参数,初始化HandlerContext...type"+type); } return (AbstractHandler) SpringContextHolder.getBean(clazz); } } 调用方式 /** * 测试策略模式

32910

使用策略模式重构 ifelseifelseif

https://medium.com/aia-sg-techblog/refactor-if-elseif-elseif-using-strategy-design-pattern-80c51913a539 策略设计模式是一种允许在运行时选择算法行为...这种模式 定义了一系列算法 封装每种算法 使算法在该系列内可互换。 下面是策略设计模式架构,客户端将在其中与上下文进行通信。...上下文将包含对策略对象引用,这反映了另一个设计原则 “针对接口而非实现编程”。 让我们检查一下如何使用以下场景重构旧式 if else 语句。...这种设计问题在于,每当我们需要添加或修改任何传输方式时,它总是会影响业务逻辑实现。 让我们使用策略设计模式重构紧密耦合代码。...策略接口及其实现 上下文对象持有策略参考 客户端代码如下所示 优点: 添加新策略不会干扰之前任何代码。 移除/重构之前任何策略都是灵活。 易于单一测试。

15000

使用策略模式消除if else

策略模式(Strategy Pattern)定义了一组策略,分别在不同类中封装起来,每种策略都可以根据当前场景相互替换,从而使策略变化可以独立于操作者。...if-else 不超过 2 层,块中代码 1~5 行,直接写到块中,否则封装为方法 if-else 超过 2 层,且块中代码超过 3 行,尽量使用策略模式 下面是PHP策略模式demo,需求是当需要发送各种通知时候...echo "send email"; } } //微信类 class Weixin{ public function send(){ echo "send weixin"; } } //存储上面策略工厂...array("sms","email","weixin"); public $factory=null; public function __construct(){ //先生成出所有策略对象...参数 , 选择使用哪一个策略 $type="sms"; $notice=$this->factory->get($type); $notice->send(); $type

82030

教你如何使用策略模式

策略模式策略模式中一个类行为或者其算法在运行是可以进行改变,这种类型也可以叫做行为型模式。...符合开发开闭原则。 缺点 策略类会很多,一个行为一个策略类。 所有的策略类都需要对外暴漏。...场景 在一个系统里面有许多类,它们之间区别仅在于它们行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 一个系统需要动态地在几种算法中选择一种。...如果一个对象有很多行为,如果不用恰当模式,这些行为就只好使用多重条件选择语句来实现。...SpringBoot中应用 接了个需求,对接第三方接口进行数据校验,每一个第三方都是一套规范,考虑到后续可扩展性,和内部统一,使用策略类进行实现。

98761

java中策略模式(策略模式java)

卫语句 卫语句使用,并不能改变前言说弊端:一旦需求更改,需要修改所有使用更改需求if-else代码块。不过使用卫语句可以让自己或者代码维护人员很容易了解代码含义。...策略模式 使用策略模式可以代替多重if-else和switch语句,让代码维护变得更加简单。...26 */ public void printFruitPrice() { fruit.price(); } } 客户端 /** * @description 使用策略模式...; } } 客户端 /** * @description 使用状态模式:状态模式,又称状态对象模式(Pattern of Objects for * States),状态模式是对象行为模式...这一个个状态对应不同处理,这是有顺序要求策略模式:这个模式好比于你假期要出国游玩,有日本、美国、新加坡等国家,你每到一个国家就执行不同游玩策略,可以先去日本,也可以先去美国,没有顺序要求。

1.2K31

工厂模式策略模式结合使用案例介绍

一、前言 在前面的文章中,我们有单独介绍过工厂模式策略模式,这两种模式是实际开发中经常会用到,今天来介绍下将两种模式结合起来使用场景及案例,这种结合模式也更加常用,能帮助我们减少if-else...使用同时,让代码逻辑也清晰简洁、扩展性高。...在讲策略模式时候,我们是借助一个环境类,持有抽象策略引用,然后初始化该环境类时候,传进来一个具体策略对象赋值给抽象策略。...这次讲解是整合工厂模式使用静态工厂方法,根据入参来从内存中找到早已初始化好具体策略对象,即枚举中实例对象。...三、总结 为什么要使用这种策略模式和静态工厂方法模式结合方案呢?

89920

使用策略模式替代if-else

改动过程中发现自己代码写有点混乱,而且现在新增逻辑代码更是雪上加霜,所以有了今天这篇文章 正文 在最开始时候我使用枚举来返回请假类型对应基本分数和绩效分数,如下代码。...百度得到答案大多都是使用策略模式,把业务逻辑都控制在每种情况实体类中,这里我也参考下网上方式使用策略模式来完成这次逻辑变动(说来惭愧,前面自己还写过策略模式文章,但是仍然不会实际运用,可见学东西要真的用起来才能融会贯通...2)); System.out.println(abstractAttence.reducePerformanceScore(0.4, 2)); } } 到这里我们就使用策略模式来替代...if-else语句,优点很明显, 每个算法单独封装,减少了算法和算法调用者耦合 合理使用继承有助于提取出算法中公共部分。...但是缺点也很明显 策略模式只适用于客户端知道所有的算法或行为情况。 策略模式造成很多策略类,每个具体策略类都会产生一个新类。不过可以使用享元模式来减少对象数量。

1.6K20

使用策略模式消除if else代码

设计模式 需求 业务需求是,有一个代报考系统,里面的一个功能是根据报考类目的不同维护不同代报考规则。...; } } 策略模式实现 利用策略模式,只需要两行即可实现业务逻辑: @Service public class ExamServiceImpl implements ExamService...具体思路是: 扫描指定包中标有@ExamRuleHandler类; 将注解中类型值作为key,对应类作为value,保存在Map中; 重写 实现ApplicationContextAware接口...总结 利用策略模式可以简化繁杂if else代码,方便维护,而利用自定义注解和自注册方式,可以方便应对需求变更。...本文只是提供一个大致思路,还有很多细节可以灵活变化,例如使用枚举类型、或者静态常量,作为代报考类型,相信你能想到更多更好方法。

55850

在golang中使用策略模式

策略模式是一种行为设计模式,它定义了一系列算法,并将每一个算法封装起来,使得它们可以相互替换。策略模式让算法变化独立于使用算法客户端。 策略模式通常由三部分组成: 1....上下文(Context):这是使用策略对象客户端代码或数据结构。 2. 策略接口(Strategy Interface):这是所有策略类所遵守公共接口。 3....下面是用Golang实现一个策略模式例子: package main import "fmt" // Strategy Interface type PaymentStrategy interface...ShoppingCart 是上下文,它使用 PaymentStrategy 来进行付款。 策略模式优点是可以让你代码更易于维护和扩展。...同时,策略模式也可以提高代码可测试性,因为你可以使用模拟对象(mocks)来替换实际策略对象,这样就可以轻松地在没有真实支付系统情况下测试你代码。

20410

真香系列:IPSec策略模板模式、模板模式策略模式区别

众所周知,IPSec可以通过三种模式创建:流量策略模式策略模板模式和配置文件模式 IPSec。那么,这三种模式有什么区别呢?它们应用场景是什么,可以同时使用不同方式建立IPSec VPN吗?...流量策略模式IPSec 作为最常用IPSec创建方式,在流策略模式下,IKE SA和IPSec SA是通过IKE提议配置和IPSec提议配置协商生成。...例如,对于大多数分支机构来说,静态 IP 地址是必需。他们只是从 ISP 获得动态 IP。在这种场景下建立IPSec VPN,我们可以使用策略模板模式IPSec VPN。...策略模板模式 IPSec 使用流量策略模式IPSec 时需要两个静态IP 原因是IPSec 对等体都可能发起IPSec VPN 建立。...策略模板模式IPSec 静态IP要求数:1 如何指定加密数据:活动对等方使用 ACL,被动对等点采用主动方提议。 应用场景:Hub and Spoke 网络,例如总部和分支机构。

1.2K50

设计模式--策略模式思考

---- 策略模式是一种简单设计模式,但是其在业务开发中是一种非常有用设计模式.举个例子,当你业务需要针对不同场景(可以简单理解为枚举类),执行不同策略时那么使用策略模式可以帮助你更好写出低耦合与高可扩展代码...使用策略模式往往策略上有着相似的输入参数以及输出结果,或者有一个公共上下文,便于抽象出策略接口Strategy,然后对应业务Service只需要引用StrategyContext填充具体策略完成自己需求...补充: 更加优雅做法是利用Spring事件机制,在Spring初始化完毕后再构建整个策略Map,可以参考我在观察者模式中所使用方法....设计模式–观察者模式思考 策略模式本质 策略模式本质是把复杂算法从一个类中提取出来,用一种合理方式管理起来,避免业务类膨胀....与状态模式关系 状态设计模式类图结构与策略模式几乎是一致.从逻辑上状态是平行无法互相替换,但是策略策略之间是可以完全替换,只是实现方式不同.在选择设计模式时候是根据这一点来区分,代码上体现是对于状态设计模式

70950

设计模式学习笔记(二)工厂模式、模板模式策略模式混合使用

工厂方法模式在实际使用时会和其他设计模式一起结合,而不是单独使用。比如在Lottery 项目中奖品发放就是工厂+模板+策略模式。...注意,如果一个系统中策略多于四个,就需要考虑使用混合模式,解决策略类膨胀问题。...:实现抽象策略定义接口,提供具体算法实现 Context:上下文类,也叫环境类,持有策略引用,是外界调用策略接口 3.2 策略模式实现 就拿生成唯一ID业务来举例子,比如在雪花算法提出之前,我们一般使用是...这样做法和前面提到工厂模式一样,会提高类之间耦合度。所以我们可以使用策略模式将这些策略抽离出来,单独实现,防止后期若需要扩展带来混乱。...而工厂模式策略模式搭配使用就是为了消除if-else嵌套,下面就结合工厂模式案例来介绍一下: 4.1 策略模式+工厂模式 在第一节中工厂模式中,我们利用工厂实现不同类型奖品发放,但是在StoreFactory

43010

策略模式实践

其中,策略模式是一种常用设计模式,本次笔者就带大家了解一下,并结合一个案例,向大家说明如何具体使用策略模式设计模式最初是由GOF(四人帮,全拼 Gang of Four)率先提出一种思想,主要分为创建型模式...策略模式属于其中行为型模式,行为型模式特点主要关注对象之间通信和交互,旨在解决对象之间责任分配和算法封装。...在策略模式中,主要存在三种角色环境角色(Context):持有一个策略引用,提供给客户端使用。抽象策略角色(Strategy):这是一个抽象角色,通常由一个接口或抽象类实现。...大家可以将引用理解为去医院看病病人,策略类是导诊台,实现类则是具体科室,病人去医院通过导诊台了解到自己应该去哪个科室,然后在对应科室里看病Excel处理中心在上文中大家已经了解了策略模式大概思想...结尾虽然策略模式有很多好处,但在使用时也需要结合具体业务场景进行考虑,不然在定义完对应策略类后,效果不加,反而会成为开发负担。

10920
领券