策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互换。
策略模式的作用
分离算法:将不同的算法封装在不同的策略类中,使它们可以互换。
扩展性:易于增加新的策略,符合开闭原则。
简化条件判断:避免使用大量的条件语句来选择不同的行为。
多个类只区别在行为:例如,不同的排序算法。
需要在运行时选择算法:例如,根据用户输入选择不同的支付方式。
封装变化:将变化的部分封装起来,使代码更清晰。
以下是一个使用策略模式的Go语言示例,模拟了不同支付方式的场景:
package main
import (
"fmt"
)
// PaymentStrategy 定义支付策略接口
type PaymentStrategy interface {
Pay(amount float64)
}
// CreditCardPayment 实现信用卡支付策略
type CreditCardPayment struct{}
func (c *CreditCardPayment) Pay(amount float64) {
fmt.Printf("Paid %.2f using Credit Card\n", amount)
}
// PayPalPayment 实现PayPal支付策略
type PayPalPayment struct{}
func (p *PayPalPayment) Pay(amount float64) {
fmt.Printf("Paid %.2f using PayPal\n", amount)
}
// ShoppingCart 购物车类,包含支付策略
type ShoppingCart struct {
paymentStrategy PaymentStrategy
}
// SetPaymentStrategy 设置支付策略
func (s *ShoppingCart) SetPaymentStrategy(strategy PaymentStrategy) {
s.paymentStrategy = strategy
}
// Checkout 结算
func (s *ShoppingCart) Checkout(amount float64) {
s.paymentStrategy.Pay(amount)
}
func main() {
// 创建购物车实例
cart := ShoppingCart{}
// 使用信用卡支付
cart.SetPaymentStrategy(&CreditCardPayment{})
cart.Checkout(100.0)
// 切换到PayPal支付
cart.SetPaymentStrategy(&PayPalPayment{})
cart.Checkout(200.0)
}