复习:支付方式
本课属于 Coddy Kotlin 学习旅程的“面向对象编程”单元。第 26 课,共 57 课。
挑战
中等围绕一个接口设计支付方式。
PaymentMethod要求提供name、fee(amount)、pay(amount)(返回是否支付成功)和status(),并提供默认的total(amount):金额加上手续费。Card(名称为card)收取 2% 的手续费(向下取整),始终支付成功,并记录支付次数:card: 2 payment(s)。Wallet(balance)(名称为wallet)不收取手续费,只有余额足以支付总额时才会支付,并从余额中扣除该总额:wallet: 50 left。GiftCard(balance)(名称为gift card)也不收取手续费,但只支付不超过 100 的金额,并且只有余额足够时才会支付:gift card: 40 left。
接着完成 checkout(amount, methods),按顺序尝试每个 PaymentMethod,第一个支付成功时返回 paid 100 with wallet (total 100);如果都无法支付,则返回 declined。
提供的代码会读取支付方式,格式为 card,wallet:150,gift:120,然后逐行读取金额,输出每次结账的结果,最后输出每种支付方式的 status()。
你的代码要写在 PaymentMethod.kt、Card.kt、Wallet.kt、GiftCard.kt 和 Functions.kt 中。Main.kt 包含提供的输入输出代码,不能编辑。
亲手试试
fun main() {
// 提供的输入/输出代码:保持原样
val input = generateSequence(::readLine).toList()
val methods = input[0].split(",").map { spec ->
val p = spec.split(":")
when (p[0]) {
"card" -> Card()
"wallet" -> Wallet(p[1].toInt())
else -> GiftCard(p[1].toInt())
}
}
for (line in input.drop(1)) println(checkout(line.toInt(), methods))
for (m in methods) println(m.status())
}
面向对象编程中的所有课
自己练习: Kotlin 在线编辑器