go语言策略模式

        策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互换使用,算法的变化不会影响到使用算法的客户。策略模式主要用于算法的切换,让算法的变化独立于使用算法的客户端。


        在 Go 语言中实现策略模式,通常会定义一个策略接口,然后为每种算法实现该接口。接着定义一个上下文(Context)来使用这些策略。以下是 Go 语言实现策略模式的一个简单示例:

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

// 实现具体的支付策略
type CreditCardStrategy struct {
    name    string
    cardNumber string
    cvv      string
    date     string
}

func (c *CreditCardStrategy) Pay(amount float64) error {
    fmt.Printf("Paying %0.2f using credit card %s\n", amount, c.cardNumber)
    return nil
}

type PayPalStrategy struct {
    email    string
    password string
}

func (p *PayPalStrategy) Pay(amount float64) error {
    fmt.Printf("Paying %0.2f using PayPal account %s\n", amount, p.email)
    return nil
}

// 定义上下文类
type PaymentContext struct {
    amount   float64
    strategy PaymentStrategy
}

// 使用策略初始化上下文
func NewPaymentContext(amount float64, strategy PaymentStrategy) *PaymentContext {
    return &PaymentContext{
        amount:   amount,
        strategy: strategy,
    }
}

// 执行支付,使用策略模式
func (p *PaymentContext) Pay() error {
    return p.strategy.Pay(p.amount)
}

// 客户端代码
func main() {
    creditCard := &CreditCardStrategy{name: "John Doe", cardNumber: "1234567890123456", cvv: "123", date: "12/24"}
    paypal := &PayPalStrategy{email: "user@example.com", password: "password"}

    // 创建不同的支付上下文
    context1 := NewPaymentContext(100.0, creditCard)
    context2 := NewPaymentContext(200.0, paypal)

    // 执行支付
    if err := context1.Pay(); err != nil {
        fmt.Println("Payment failed:", err)
    }

    if err := context2.Pay(); err != nil {
        fmt.Println("Payment failed:", err)
    }
}
        在这个示例中, PaymentStrategy  是一个策略接口,定义了  Pay  方法。 CreditCardStrategy  和  PayPalStrategy  是具体的策略实现,它们实现了  PaymentStrategy  接口的  Pay  方法。 PaymentContext  是上下文类,它接受一个策略并在  Pay  方法中使用它来执行支付操作。
        

        客户端代码创建了两种支付策略的实例,并使用它们创建了  PaymentContext  对象,然后调用  Pay  方法执行支付。这样,支付方式可以在运行时动态地改变,而不影响使用这些策略的客户端代码。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leijmdas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值