// 定义计算面积的策略接口
interface ShapeAreaStrategy {
fun calculateArea(): Double
}
// 矩形面积计算策略实现类
class RectangleAreaStrategy(private val width: Double, private val height: Double) : ShapeAreaStrategy {
override fun calculateArea(): Double {
return width * height
}
}
// 圆形面积计算策略实现类
class CircleAreaStrategy(private val radius: Double) : ShapeAreaStrategy {
override fun calculateArea(): Double {
return Math.PI * radius * radius
}
}
// 客户端代码
class ShapeCalculator(private var strategy: ShapeAreaStrategy) {
fun setStrategy(strategy: ShapeAreaStrategy) {
this.strategy = strategy
}
fun calculateArea(): Double {
return strategy.calculateArea()
}
}
fun main() {
// 使用矩形策略
val rectangleCalculator = ShapeCalculator(RectangleAreaStrategy(5.0, 3.0))
println("矩形面积: ${rectangleCalculator.calculateArea()}")
// 切换到圆形策略
rectangleCalculator.setStrategy(CircleAreaStrategy(4.0))
println("圆形面积: ${rectangleCalculator.calculateArea()}")
}