// 定义策略接口
interface PaymentStrategy {
fun calculateTotal(): Double
}
// 实现具体策略类
class PayPalStrategy(private val amount: Double) : PaymentStrategy {
override fun calculateTotal(): Double {
return amount * 0.05
}
}
class CreditCardStrategy(private val amount: Double) : PaymentStrategy {
override fun calculateTotal(): Double {
return amount * 0.1
}
}
// 定义上下文类,使用策略对象进行计算
class PaymentContext(private val strategy: PaymentStrategy) {
fun calculate(): Double {
return strategy.calculateTotal()
}
}
// 在Activity中使用策略模式
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 创建策略对象并设置到上下文中
val payPalContext = PaymentContext(PayPalStrategy(100.0))
val creditCardContext = PaymentContext(CreditCardStrategy(100.0))
// 计算并打印结果
println("PayPal Total: ${payPalContext.calculate()}")
println("Credit Card Total: ${creditCardContext.calculate()}")
}
}
在上面的代码中,我们定义了一个PaymentStrategy接口,它包含一个calculateTotal()方法。然后,我们实现了两个具体的策略类PayPalStrategy和CreditCardStrategy,它们都实现了PaymentStrategy接口。PayPalStrategy计算支付总额时,将总金额乘以0.05;而CreditCardStrategy计算支付总额时,将总金额乘以0.1。
接下来,我们定义了一个PaymentContext类,它接受一个策略对象作为参数。在PaymentContext类中,我们重写了calculate()方法,使用策略对象的calculateTotal()方法来计算支付总额。这样,我们可以根据不同的策略对象来计算不同的支付总额。
最后,在MainActivity中,我们创建了两个上下文对象payPalContext和creditCardContext,并将对应的策略对象设置到它们中。然后,我们调用上下文对象的calculate()方法来计算支付总额,并打印结果。这样,我们可以根据不同的支付方式选择不同的策略对象来进行计算。