MST

星途 面试题库

面试题:Kotlin中复杂业务场景下设计模式的综合运用

假设你正在开发一个金融交易系统,涉及订单创建、处理、撤销,资金的转入转出,以及交易记录的审计等功能。请阐述如何在Kotlin中综合运用多种设计模式(如命令模式、状态模式、责任链模式等)来构建一个可维护、可扩展且高内聚低耦合的系统架构,并给出关键代码示例。
29.6万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

命令模式

  1. 定义命令接口
interface OrderCommand {
    fun execute()
    fun undo()
}
  1. 具体命令实现 - 创建订单
class CreateOrderCommand(private val orderService: OrderService, private val order: Order) : OrderCommand {
    override fun execute() {
        orderService.createOrder(order)
    }

    override fun undo() {
        orderService.cancelOrder(order)
    }
}
  1. 具体命令实现 - 撤销订单
class CancelOrderCommand(private val orderService: OrderService, private val order: Order) : OrderCommand {
    override fun execute() {
        orderService.cancelOrder(order)
    }

    override fun undo() {
        orderService.restoreOrder(order)
    }
}
  1. 命令调用者
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() }
    }
}

状态模式

  1. 订单状态接口
interface OrderState {
    fun handle(order: Order)
}
  1. 具体订单状态 - 已创建
class CreatedState : OrderState {
    override fun handle(order: Order) {
        // 逻辑:例如可以转换到处理中状态
        order.state = ProcessingState()
    }
}
  1. 具体订单状态 - 处理中
class ProcessingState : OrderState {
    override fun handle(order: Order) {
        // 逻辑:例如处理完成可以转换到已完成状态
        order.state = CompletedState()
    }
}
  1. 订单类
class Order {
    var state: OrderState = CreatedState()
    // 订单其他属性和方法
}

责任链模式

  1. 审批处理器抽象类
abstract class ApprovalHandler {
    protected var nextHandler: ApprovalHandler? = null

    fun setNext(handler: ApprovalHandler): ApprovalHandler {
        this.nextHandler = handler
        return handler
    }

    abstract fun handleApproval(request: ApprovalRequest)
}
  1. 具体审批处理器 - 金额审批
class AmountApprovalHandler : ApprovalHandler() {
    override fun handleApproval(request: ApprovalRequest) {
        if (request.amount < 10000) {
            println("金额审批通过")
            nextHandler?.handleApproval(request)
        } else {
            println("金额审批不通过")
        }
    }
}
  1. 具体审批处理器 - 风险审批
class RiskApprovalHandler : ApprovalHandler() {
    override fun handleApproval(request: ApprovalRequest) {
        if (request.riskLevel < 3) {
            println("风险审批通过")
            nextHandler?.handleApproval(request)
        } else {
            println("风险审批不通过")
        }
    }
}
  1. 审批请求类
class ApprovalRequest(val amount: Double, val riskLevel: Int)

综合使用示例

  1. 构建责任链
val amountHandler = AmountApprovalHandler()
val riskHandler = RiskApprovalHandler()
amountHandler.setNext(riskHandler)
  1. 创建并执行命令
val orderService = OrderService()
val order = Order()
val createOrderCommand = CreateOrderCommand(orderService, order)
val invoker = OrderInvoker()
invoker.addCommand(createOrderCommand)
invoker.executeCommands()
  1. 状态处理
order.state.handle(order)

通过命令模式解耦命令的发起者和执行者,状态模式管理订单状态变化,责任链模式处理审批流程,从而构建一个可维护、可扩展且高内聚低耦合的金融交易系统架构。