android kotlin 策略模式

95 阅读1分钟

// 定义策略接口
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()方法。然后,我们实现了两个具体的策略类PayPalStrategyCreditCardStrategy,它们都实现了PaymentStrategy接口。PayPalStrategy计算支付总额时,将总金额乘以0.05;而CreditCardStrategy计算支付总额时,将总金额乘以0.1。

接下来,我们定义了一个PaymentContext类,它接受一个策略对象作为参数。在PaymentContext类中,我们重写了calculate()方法,使用策略对象的calculateTotal()方法来计算支付总额。这样,我们可以根据不同的策略对象来计算不同的支付总额。

最后,在MainActivity中,我们创建了两个上下文对象payPalContextcreditCardContext,并将对应的策略对象设置到它们中。然后,我们调用上下文对象的calculate()方法来计算支付总额,并打印结果。这样,我们可以根据不同的支付方式选择不同的策略对象来进行计算。