策略模式通过定义统一接口将不同业务逻辑封装为独立策略,如支付方式中的支付宝、微信等,各自实现Pay方法;上下文结构体持有策略接口,运行时动态设置具体策略实例,避免大量条件判断,提升扩展性与可维护性,新增策略无需修改原有代码,符合开闭原则。

在Go语言中使用策略模式,可以灵活应对不同业务场景的切换,避免大量if-else或switch判断,提升代码可维护性和扩展性。核心思想是将每种业务逻辑封装成独立的策略,通过统一接口调用,运行时动态选择具体实现。
定义统一策略接口
首先定义一个公共接口,声明所有策略共有的行为方法。比如处理不同类型的数据导出、支付方式、校验规则等。
type PaymentStrategy interface { Pay(amount float64) string}
实现具体策略
针对不同业务逻辑实现该接口。例如支付宝支付、微信支付、银行卡支付等策略各自独立实现Pay方法。
type Alipay struct{}func (a *Alipay) Pay(amount float64) string { return fmt.Sprintf("使用支付宝支付 %.2f 元", amount)}type WeChatPay struct{}func (w *WeChatPay) Pay(amount float64) string { return fmt.Sprintf("使用微信支付 %.2f 元", amount)}type BankCard struct{}func (b *BankCard) Pay(amount float64) string { return fmt.Sprintf("使用银行卡支付 %.2f 元", amount)}
上下文管理策略选择
创建一个上下文结构体,持有当前策略实例,并提供设置和执行方法,便于运行时切换策略。
立即学习“go语言免费学习笔记(深入)”;
进销存产品库存管理系统 v2.22源码
进销存产品库存管理系统完全基于 WEB 的综合应用解决方案, 真正的 B/S 模式, 使用asp开发, 不需任何安装, 只需一个浏览器, 企业领导, 业务人员, 操作人员可以在不同时间, 地点, 并且可动态, 及时反映企业业务的方方面面. 产品入库,入库查询 库存管理,库存调拨 产品出库,出库查询 统计报表 会员管理 员工管理 工资管理 单位管理 仓库管理 凭证管理 资产管理 流水账管理 产品分类
1689 查看详情
type PaymentContext struct { strategy PaymentStrategy}func (p *PaymentContext) SetStrategy(strategy PaymentStrategy) { p.strategy = strategy}func (p *PaymentContext) ExecutePayment(amount float64) string { if p.strategy == nil { return "未设置支付方式" } return p.strategy.Pay(amount)}
使用时根据条件动态设置策略:
context := &PaymentContext{}// 模拟用户选择paymentType := "wechat"var strategy PaymentStrategyswitch paymentType {case "alipay": strategy = &Alipay{}case "wechat": strategy = &WeChatPay{}case "bank": strategy = &BankCard{}default: strategy = &Alipay{}}context.SetStrategy(strategy)result := context.ExecutePayment(99.9)fmt.Println(result) // 输出对应支付方式
这种方式让新增支付方式只需添加新结构体并实现接口,无需修改已有逻辑,符合开闭原则。
基本上就这些。策略模式在Go里靠接口和组合就能轻松实现,关键是把变化的业务抽成独立类型,统一调用入口。实际项目中可用于报表生成、消息通知渠道、数据校验规则等多种场景。
以上就是Golang如何使用策略模式处理不同业务的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1112743.html
微信扫一扫
支付宝扫一扫