策略模式通过定义统一接口将不同业务逻辑封装为独立策略,如支付方式中的支付宝、微信等,各自实现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语言免费学习笔记(深入)”;
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 PaymentStrategy
switch 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如何使用策略模式处理不同业务的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号