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)
}
目录
相关文章
|
6月前
|
设计模式 算法 测试技术
动态支付策略:Go 语言中策略模式的妙用
动态支付策略:Go 语言中策略模式的妙用
|
6月前
|
缓存 算法 Go
|
9月前
|
设计模式 算法 Go
[设计模式 Go实现] 行为型~策略模式
[设计模式 Go实现] 行为型~策略模式
|
设计模式 算法 Go
Go语言实现设计模式之策略模式
策略模式是一种常用的设计模式,它允许在运行时选择算法的行为。本文将详细介绍策略模式的概念和原理,并使用Go语言实现一个示例,以帮助读者更好地理解该设计模式的应用。文章将结合开发和生活中的示例,说明策略模式的应用场景。
268 0
|
设计模式 存储 算法
Go设计模式(20)-策略模式
策略模式可能是很多同学学习到的第一种模式。这个模式确实适合作为开篇模式来讲,主要原因在于该模式简单、纯粹、没有太多技巧,但是很好的表达出了设计模式的理念,让读者能够直观的感受到设计模式带来的好处。
|
设计模式 算法 Go
Go 设计模式-策略模式
Go 设计模式-策略模式
217 0
Go 设计模式-策略模式
|
2月前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
95 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
4天前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
52 20
|
2天前
|
存储 监控 算法
探秘员工泄密行为防线:基于Go语言的布隆过滤器算法解析
在信息爆炸时代,员工泄密行为对企业构成重大威胁。本文聚焦布隆过滤器(Bloom Filter)这一高效数据结构,结合Go语言实现算法,帮助企业识别和预防泄密风险。通过构建正常操作“指纹库”,实时监测员工操作,快速筛查可疑行为。示例代码展示了如何利用布隆过滤器检测异常操作,并提出优化建议,如调整参数、结合日志分析系统等,全方位筑牢企业信息安全防线,守护核心竞争力。
|
10天前
|
Go C语言
Go语言入门:分支结构
本文介绍了Go语言中的条件语句,包括`if...else`、`if...else if`和`switch`结构,并通过多个练习详细解释了它们的用法。`if...else`用于简单的条件判断;`if...else if`处理多条件分支;`switch`则适用于基于不同值的选择逻辑。特别地,文章还介绍了`fallthrough`关键字,用于优化重复代码。通过实例如判断年龄、奇偶数、公交乘车及成绩等级等,帮助读者更好地理解和应用这些结构。
34 14