定义
定义了算法(一些列实现不同功能的方法)家族,分别封装起来,让它们之间相互可以替换,此模式让算法的变化,不会影响到使用算法的客户。
策略模式结构图
解释
Strategy:策略类,定义所有的算法子类支持的算法的公共接口。
Context:上下文类,维护一个策略Strategy对象的引用,在上下文类中,用一个方法来调用不同的算法类的方法。
ConcreteStrategy:封装了具体的算法或行为的类,都继承了Strategy类。
案例
做一个商场收银软件,根据客户购买的商品以及商场不同的营销模式,比如说满500减20,商品打八折等,向客户收费。
版本1.0
type Product struct {
Num int64
Price float64
Discount float64
}
func Pay(product *Product, str string) (res float64) {
switch str {
case "原价":
return float64(product.Num) * product.Price * product.Discount
case "打八折":
return float64(product.Num) * product.Price