前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >在golang中使用策略模式

在golang中使用策略模式

作者头像
运维开发王义杰
发布2023-08-16 19:49:56
发布2023-08-16 19:49:56
28300
代码可运行
举报
运行总次数:0
代码可运行

策略模式是一种行为设计模式,它定义了一系列的算法,并将每一个算法封装起来,使得它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端。

策略模式通常由三部分组成:

1. 上下文(Context):这是使用策略对象的客户端代码或数据结构。

2. 策略接口(Strategy Interface):这是所有策略类所遵守的公共接口。

3. 具体策略(Concrete Strategies)**:这些类包含了实现策略接口的不同算法。

下面是用Golang实现的一个策略模式的例子:

代码语言:javascript
代码运行次数:0
复制
package main


import "fmt"


// Strategy Interface
type PaymentStrategy interface {
  Pay(amount int) string
}


// Concrete Strategy
type PayPalStrategy struct{}


func (p *PayPalStrategy) Pay(amount int) string {
  return fmt.Sprintf("Paid %d using PayPal", amount)
}


// Concrete Strategy
type CreditCardStrategy struct{}


func (c *CreditCardStrategy) Pay(amount int) string {
  return fmt.Sprintf("Paid %d using Credit Card", amount)
}


// Context
type ShoppingCart struct {
  amount      int
  paymentMode PaymentStrategy
}


func (s *ShoppingCart) checkout() string {
  return s.paymentMode.Pay(s.amount)
}


func main() {
  cart := &ShoppingCart{amount: 200, paymentMode: &PayPalStrategy{}}
  fmt.Println(cart.checkout()) // Paid 200 using PayPal


  cart = &ShoppingCart{amount: 300, paymentMode: &CreditCardStrategy{}}
  fmt.Println(cart.checkout()) // Paid 300 using Credit Card
}

在这个例子中,PaymentStrategy是策略接口,PayPalStrategy和 CreditCardStrategy是具体的策略。ShoppingCart 是上下文,它使用 PaymentStrategy 来进行付款。

策略模式的优点是可以让你的代码更易于维护和扩展。当你需要添加一个新的策略时,你只需要添加一个实现了策略接口的新类,而不需要修改已有的代码。同时,策略模式也可以提高代码的可测试性,因为你可以使用模拟对象(mocks)来替换实际的策略对象,这样就可以轻松地在没有真实支付系统的情况下测试你的代码。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维开发王义杰 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档