go语言中的策略模式

91 阅读2分钟

策略模式是一种软件设计模式,它允许在运行时选择算法的行为。在Go语言中,策略模式可以通过使用接口和函数来实现。下面是一个简单的例子:

定义一个接口,包含一个计算价格的方法:

type PricingStrategy interface {
    CalculatePrice(float64) float64
}

定义几个实现PricingStrategy接口的结构体:

type NormalStrategy struct{}

func (ns *NormalStrategy) CalculatePrice(price float64) float64 {
    return price
}

type HappyHourStrategy struct{}

func (hhs *HappyHourStrategy) CalculatePrice(price float64) float64 {
    return 0.5 * price
}

定义一个函数,接受一个PricingStrategy类型的参数,并使用它来计算价格:

func GetPrice(strategy PricingStrategy, price float64) float64 {
    return strategy.CalculatePrice(price)
}

然后可以使用上述代码来计算价格,如下所示:

normal := &NormalStrategy{}
happyHour := &HappyHourStrategy{}

fmt.Println(GetPrice(normal, 100))      // 输出 100.0
fmt.Println(GetPrice(happyHour, 100))  // 输出 50.0

在这个例子中,我们定义了两个实现PricingStrategy接口的结构体,它们分别计算正常价格和折扣价格。然后我们定义了一个函数,接受一个PricingStrategy类型的参数,并使用它来计算价格。最后,我们使用这个函数来计算正常价格和折扣价格。

除了上述方法,还可以使用函数类型来实现策略模式。下面是一个使用函数类型的例子:

定义一个函数类型:

type PricingStrategy func(float64) float64

定义几个实现PricingStrategy函数类型的函数:

func NormalStrategy(price float64) float64 {
    return price
}

func HappyHourStrategy(price float64) float64 {
    return 0.5 * price
}

定义一个函数,接受一个PricingStrategy类型的参数,并使用它来计算价格:

func GetPrice(strategy PricingStrategy, price float64) float64 {
    return strategy(price)
}

然后可以使用上述代码来计算价格,如下所示:

fmt.Println(GetPrice(NormalStrategy, 100))      // 输出 100.0
fmt.Println(GetPrice(HappyHourStrategy, 100))  // 输出 50.0

在这个例子中,我们定义了两个函数,它们分别计算正常价格和折扣价格。然后我们定义了一个函数类型,它接受一个float64类型的参数,并返回一个float64类型的值。最后,我们定义了一个函数,接受一个PricingStrategy类型的参数,并使用它来计算价格。最后,我们使用这个函数来计算正常价格和折扣价格。

总之,在Go语言中,策略模式可以通过使用接口和函数类型来实现。这使得代码更加简洁和易于维护.