Go的策略模式

简介: 策略模式是一种行为设计模式,它允许在运行时选择算法的行为。它将算法封装成独立的类,并使它们之间可以互相替换,从而使得算法可以独立于客户端而变化。

在策略模式中,有三个主要的角色:

  1. Context(上下文):它是包含策略的对象,负责将请求委派给具体的策略对象。
  2. Strategy(策略):它定义了一个接口或抽象类,用于封装具体算法的行为。
  3. Concrete Strategy(具体策略):它实现了策略接口,定义了具体的算法。

策略模式的核心思想是将不同的算法封装成独立的策略类,每个类负责处理特定的算法。上下文对象根据需要选择合适的策略对象来执行相应的算法。

策略模式的优点包括:

  1. 提供了一种灵活的方式来选择算法,使得算法可以独立于客户端而变化。
  2. 遵循开闭原则,新增策略不会修改现有的代码。
  3. 代码结构更清晰,各个策略可以独立进行单元测试。

然而,策略模式也有一些缺点:

  1. 增加了类的数量,特别是当策略较多时。
  2. 客户端需要了解不同的策略,可能增加了客户端的复杂性。
package main

import "fmt"

// PaymentStrategy 定义支付策略接口
type PaymentStrategy interface {
    Pay(amount float64)
}

// CashPaymentStrategy 现金支付策略
type CashPaymentStrategy struct{}

func (c *CashPaymentStrategy) Pay(amount float64) {
    fmt.Printf("支付了 %.2f 元现金\n", amount)
}

// CreditCardPaymentStrategy 信用卡支付策略
type CreditCardPaymentStrategy struct{}

func (c *CreditCardPaymentStrategy) Pay(amount float64) {
    fmt.Printf("支付了 %.2f 元信用卡\n", amount)
}

// PaymentContext 支付上下文对象
type PaymentContext struct {
    strategy PaymentStrategy
}

func (p *PaymentContext) SetStrategy(strategy PaymentStrategy) {
    p.strategy = strategy
}

func (p *PaymentContext) Pay(amount float64) {
    p.strategy.Pay(amount)
}

func main() {
    payment := &PaymentContext{}

    // 使用现金支付策略
    payment.SetStrategy(&CashPaymentStrategy{})
    payment.Pay(100.50)

    // 使用信用卡支付策略
    payment.SetStrategy(&CreditCardPaymentStrategy{})
    payment.Pay(200.75)
}
目录
相关文章
|
5月前
|
设计模式 算法 测试技术
动态支付策略:Go 语言中策略模式的妙用
动态支付策略:Go 语言中策略模式的妙用
|
5月前
|
缓存 算法 Go
|
8月前
|
设计模式 算法 Go
[设计模式 Go实现] 行为型~策略模式
[设计模式 Go实现] 行为型~策略模式
|
设计模式 算法 Go
Go语言实现设计模式之策略模式
策略模式是一种常用的设计模式,它允许在运行时选择算法的行为。本文将详细介绍策略模式的概念和原理,并使用Go语言实现一个示例,以帮助读者更好地理解该设计模式的应用。文章将结合开发和生活中的示例,说明策略模式的应用场景。
246 0
|
设计模式 存储 算法
Go设计模式(20)-策略模式
策略模式可能是很多同学学习到的第一种模式。这个模式确实适合作为开篇模式来讲,主要原因在于该模式简单、纯粹、没有太多技巧,但是很好的表达出了设计模式的理念,让读者能够直观的感受到设计模式带来的好处。
|
设计模式 算法 Go
Go 设计模式-策略模式
Go 设计模式-策略模式
211 0
Go 设计模式-策略模式
|
13天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
54 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
1月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
41 7
|
1月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
1月前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
102 71