面试题答案
一键面试命令模式
- 定义命令接口:
interface OrderCommand {
fun execute()
fun undo()
}
- 具体命令实现 - 创建订单:
class CreateOrderCommand(private val orderService: OrderService, private val order: Order) : OrderCommand {
override fun execute() {
orderService.createOrder(order)
}
override fun undo() {
orderService.cancelOrder(order)
}
}
- 具体命令实现 - 撤销订单:
class CancelOrderCommand(private val orderService: OrderService, private val order: Order) : OrderCommand {
override fun execute() {
orderService.cancelOrder(order)
}
override fun undo() {
orderService.restoreOrder(order)
}
}
- 命令调用者:
class OrderInvoker {
private val commandList = mutableListOf<OrderCommand>()
fun addCommand(command: OrderCommand) {
commandList.add(command)
}
fun executeCommands() {
commandList.forEach { it.execute() }
}
fun undoCommands() {
commandList.reversed().forEach { it.undo() }
}
}
状态模式
- 订单状态接口:
interface OrderState {
fun handle(order: Order)
}
- 具体订单状态 - 已创建:
class CreatedState : OrderState {
override fun handle(order: Order) {
// 逻辑:例如可以转换到处理中状态
order.state = ProcessingState()
}
}
- 具体订单状态 - 处理中:
class ProcessingState : OrderState {
override fun handle(order: Order) {
// 逻辑:例如处理完成可以转换到已完成状态
order.state = CompletedState()
}
}
- 订单类:
class Order {
var state: OrderState = CreatedState()
// 订单其他属性和方法
}
责任链模式
- 审批处理器抽象类:
abstract class ApprovalHandler {
protected var nextHandler: ApprovalHandler? = null
fun setNext(handler: ApprovalHandler): ApprovalHandler {
this.nextHandler = handler
return handler
}
abstract fun handleApproval(request: ApprovalRequest)
}
- 具体审批处理器 - 金额审批:
class AmountApprovalHandler : ApprovalHandler() {
override fun handleApproval(request: ApprovalRequest) {
if (request.amount < 10000) {
println("金额审批通过")
nextHandler?.handleApproval(request)
} else {
println("金额审批不通过")
}
}
}
- 具体审批处理器 - 风险审批:
class RiskApprovalHandler : ApprovalHandler() {
override fun handleApproval(request: ApprovalRequest) {
if (request.riskLevel < 3) {
println("风险审批通过")
nextHandler?.handleApproval(request)
} else {
println("风险审批不通过")
}
}
}
- 审批请求类:
class ApprovalRequest(val amount: Double, val riskLevel: Int)
综合使用示例
- 构建责任链:
val amountHandler = AmountApprovalHandler()
val riskHandler = RiskApprovalHandler()
amountHandler.setNext(riskHandler)
- 创建并执行命令:
val orderService = OrderService()
val order = Order()
val createOrderCommand = CreateOrderCommand(orderService, order)
val invoker = OrderInvoker()
invoker.addCommand(createOrderCommand)
invoker.executeCommands()
- 状态处理:
order.state.handle(order)
通过命令模式解耦命令的发起者和执行者,状态模式管理订单状态变化,责任链模式处理审批流程,从而构建一个可维护、可扩展且高内聚低耦合的金融交易系统架构。