面试题答案
一键面试1. 数据类的定义
在Kotlin中,数据类用于存储数据,它会自动生成一些有用的方法,如equals()
、hashCode()
、toString()
以及copy()
等。对于电商系统中的订单数据,我们可以这样定义数据类:
data class Order(
val orderId: String,
val userId: String,
val products: List<Product>,
val totalPrice: Double,
val orderStatus: OrderStatus
)
data class Product(
val productId: String,
val productName: String,
val price: Double,
val quantity: Int
)
enum class OrderStatus {
PENDING, PROCESSING, SHIPPED, DELIVERED, CANCELLED
}
2. 委托模式的运用
委托模式是一种设计模式,它允许对象将部分职责委托给另一个对象。在订单处理流程中,我们可以使用委托来将订单处理的某些任务委托给特定的处理器。
首先,定义一个订单处理器接口:
interface OrderProcessor {
fun processOrder(order: Order)
}
然后,实现具体的订单处理器:
class DefaultOrderProcessor : OrderProcessor {
override fun processOrder(order: Order) {
// 处理订单的逻辑,比如更新库存、记录订单日志等
println("Processing order ${order.orderId}...")
}
}
接下来,在订单类中使用委托模式:
class OrderHandler(private val processor: OrderProcessor = DefaultOrderProcessor()) {
fun handleOrder(order: Order) {
processor.processOrder(order)
}
}
3. 优势
- 代码复用:通过委托模式,不同的订单处理逻辑可以封装在不同的处理器类中,这些处理器可以在多个地方复用。例如,如果有不同类型的订单(普通订单、促销订单等),可以为每种订单类型创建不同的处理器,然后在需要时将订单处理任务委托给相应的处理器。
- 可维护性:数据类和委托模式的结合使得代码结构更加清晰。数据类专注于数据的存储和传输,而委托模式将处理逻辑分离出来,使得代码更容易理解和维护。当订单处理逻辑发生变化时,只需要修改相应的处理器类,而不需要修改订单数据类。
- 扩展性:如果未来需要添加新的订单处理逻辑,只需要实现新的
OrderProcessor
接口,并在OrderHandler
中使用新的处理器即可,而不会影响现有的代码结构。例如,如果需要添加支付处理的逻辑,可以创建一个PaymentOrderProcessor
类实现OrderProcessor
接口,并在OrderHandler
中使用它来处理支付相关的订单处理。