MST
星途 面试题库

面试题:Kotlin 中策略模式的优化与实践案例

在 Kotlin 项目里,假设我们有一个电商系统,针对不同会员等级(普通会员、高级会员、VIP 会员)有不同的折扣计算策略。请使用策略模式进行设计,并说明如何在 Kotlin 中利用函数式编程特性对该策略模式进行优化,以提高代码的可维护性和扩展性。
19.2万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试
  1. 策略模式设计
    • 首先定义折扣计算策略的接口:
interface DiscountStrategy {
    fun calculateDiscount(price: Double): Double
}
  • 然后分别实现不同会员等级的折扣策略:
class NormalMemberDiscount : DiscountStrategy {
    override fun calculateDiscount(price: Double): Double {
        return price * 0.95 // 普通会员95折
    }
}

class PremiumMemberDiscount : DiscountStrategy {
    override fun calculateDiscount(price: Double): Double {
        return price * 0.9 // 高级会员9折
    }
}

class VIPMemberDiscount : DiscountStrategy {
    override fun calculateDiscount(price: Double): Double {
        return price * 0.8 // VIP会员8折
    }
}
  • 接着在电商系统中使用这些策略:
class EcommerceSystem {
    private lateinit var discountStrategy: DiscountStrategy

    fun setDiscountStrategy(strategy: DiscountStrategy) {
        this.discountStrategy = strategy
    }

    fun calculateFinalPrice(originalPrice: Double): Double {
        return discountStrategy.calculateDiscount(originalPrice)
    }
}
  1. 利用函数式编程特性优化
    • 在Kotlin中,可以使用高阶函数来简化策略模式。首先,将折扣计算逻辑定义为高阶函数:
typealias DiscountCalculator = (Double) -> Double

val normalMemberDiscount: DiscountCalculator = { price -> price * 0.95 }
val premiumMemberDiscount: DiscountCalculator = { price -> price * 0.9 }
val vipMemberDiscount: DiscountCalculator = { price -> price * 0.8 }
  • 然后修改电商系统,使用高阶函数作为策略:
class EcommerceSystem {
    private lateinit var discountCalculator: DiscountCalculator

    fun setDiscountCalculator(calculator: DiscountCalculator) {
        this.discountCalculator = calculator
    }

    fun calculateFinalPrice(originalPrice: Double): Double {
        return discountCalculator(originalPrice)
    }
}

这样做的好处是:

  • 提高可维护性:高阶函数的定义更简洁,逻辑更清晰,当折扣策略发生变化时,只需修改对应的高阶函数即可,无需在类层次结构中进行复杂的修改。
  • 提高扩展性:如果要新增一种会员等级的折扣策略,只需定义一个新的高阶函数,并在需要使用的地方传入即可,无需创建新的类并继承接口,代码的侵入性更小。