设计模式

设计模式-策略模式

2023-10-14  本文已影响0人  Hengry

策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时选择算法的行为。这个模式定义了一系列>算法,将它们封装起来,并且使它们可以相互替换,以使算法的选择独立于客户端代码。

以下是一个策略模式的简单案例,假设你正在开发一个电商应用,需要根据不同的促销策略来计算商品的折扣价格。

首先,定义抽象策略接口:

protocol PricingStrategy {
    func calculateDiscountedPrice(originalPrice: Double) -> Double
}

然后,实现不同的具体策略类,例如VIP会员折扣、学生折扣和无折扣:

class VIPPricingStrategy: PricingStrategy {
    func calculateDiscountedPrice(originalPrice: Double) -> Double {
        return originalPrice * 0.8 // VIP会员享有 20% 折扣
    }
}

class StudentPricingStrategy: PricingStrategy {
    func calculateDiscountedPrice(originalPrice: Double) -> Double {
        return originalPrice * 0.9 // 学生享有 10% 折扣
    }
}

class NoDiscountPricingStrategy: PricingStrategy {
    func calculateDiscountedPrice(originalPrice: Double) -> Double {
        return originalPrice // 无折扣
    }
}

接下来,创建一个购物车类,该类使用策略模式来应用不同的折扣策略:

class ShoppingCart {
    private var pricingStrategy: PricingStrategy
    
    init(pricingStrategy: PricingStrategy) {
        self.pricingStrategy = pricingStrategy
    }
    
    func setPricingStrategy(strategy: PricingStrategy) {
        self.pricingStrategy = strategy
    }
    
    func checkout(originalPrice: Double) -> Double {
        let discountedPrice = pricingStrategy.calculateDiscountedPrice(originalPrice: originalPrice)
        return discountedPrice
    }
}

现在,你可以在购物车中应用不同的折扣策略:

let cart = ShoppingCart(pricingStrategy: NoDiscountPricingStrategy())
let originalPrice = 100.0

// 无折扣
let price1 = cart.checkout(originalPrice: originalPrice)

// 使用VIP会员折扣
cart.setPricingStrategy(strategy: VIPPricingStrategy())
let price2 = cart.checkout(originalPrice: originalPrice)

// 使用学生折扣
cart.setPricingStrategy(strategy: StudentPricingStrategy())
let price3 = cart.checkout(originalPrice: originalPrice)

print("原价: \(originalPrice)")
print("无折扣: \(price1)")
print("VIP会员折扣: \(price2)")
print("学生折扣: \(price3)")

通过策略模式,你可以在不修改购物车类的情况下轻松地切换不同的折扣策略,从而实现了灵活的促销策略管理。这个模式使得客户端代码与具体策略的实现相分离,同时提高了可维护性和扩展性。

上一篇 下一篇

猜你喜欢

热点阅读