策略模式(Strategy Pattern) 您所在的位置:网站首页 go语言设计模式是什么 策略模式(Strategy Pattern)

策略模式(Strategy Pattern)

2024-07-09 16:45| 来源: 网络整理| 查看: 265

策略模式(Strategy Pattern)是一种面向对象编程设计模式,它允许在运行时动态地改变算法或策略的选择,从而使算法的变化独立于使用它的客户端。这种模式通过将算法封装在单独的类中,使得它们可以相互替换,并使得它们易于理解、扩展和维护。

下面是一个使用 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\n", amount) return nil } type PayPalStrategy struct { email string password string } func (p *PayPalStrategy) Pay(amount float64) error { fmt.Printf("Paying %0.2f using PayPal\n", amount) 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) }

在上面的代码中,首先定义了一个 PaymentStrategy 接口,其中定义了一个 Pay 方法,用于实现具体的支付策略。然后,定义了两个具体的支付策略,分别是信用卡支付策略和 PayPal 支付策略,它们都实现了 PaymentStrategy 接口的 Pay 方法。

接着,定义了一个 PaymentContext 上下文类,用于维护支付的金额和所选择的支付策略。在 NewPaymentContext 函数中,通过传入支付的金额和支付策略,创建了一个新的 PaymentContext 实例。在 Pay 方法中,调用了当前支付策略的 Pay 方法,并将支付的金额作为参数传递。

最后,可以在客户端代码中使用上面的代码来实现不同的支付策略,例如:

func main() { creditCardStrategy := &CreditCardStrategy{ name: "John Doe", cardNumber: "1234 5678 9012 3456", cvv: "123", date: "01/22", } paymentContext := NewPaymentContext(100, creditCardStrategy) paymentContext.Pay() payPalStrategy := &PayPalStrategy{ email: "[email protected]", password: "mypassword", } paymentContext = NewPaymentContext(200, payPalStrategy) paymentContext.Pay() }

在上面的代码中,首先创建了一个信用卡支付策略的实例,并将其传入到 NewPaymentContext 函数中,创建了一个新的 PaymentContext 实例。然后,调用了 Pay 方法,这会调用信用卡支付策略的 Pay 方法,并将支付的金额作为参数传递。

接着,创建了一个 PayPal 支付策略的实例,并通过调用 NewPaymentContext 函数创建了一个新的 PaymentContext 实例。然后,再次调用了 Pay 方法,这会调用 PayPal 支付策略的 Pay 方法,并将支付的金额作为参数传递。

使用策略模式,可以轻松地切换不同的支付策略,而不需要修改客户端代码。这使得代码更具灵活性和可维护性。

本文章首发在 LearnKu.com 网站上。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有