scala实现职责链模式

package com.linewell.modeldesgin.responsechain

/**
* 职责链模式,自我感觉和akka的管理机制很像
* Created by ctao on 2015/8/30.
*/

/**
* 审批对象
* @param amount 金额
* @param number 编号
* @param purpose 采购目的
*/
case class PurchaseRequest(amount: Double, number: Int, purpose: String)


/**
* 抽象处理者,审批者类
* @param name 审批人姓名
*/
abstract class Approve(name: String) {

/**
* 定义后继对象
*/
protected var successor: Approve = _

/**
* 设置后继对象
* @param approve 审批者类
*/
def setSuccessor(approve: Approve) = successor = approve

/**
* 抽象处理审批请求方法
* @param request 审批对象
*/
def processRequest(request: PurchaseRequest): Unit
}

/**
* 主任类
* @param name 审批人姓名
*/
class Director(name: String) extends Approve(name) {
override def processRequest(request: PurchaseRequest) = request.amount match {
case x: Double if x < 50000 =>
println(s"主任$name 审批采购单:" + request.number + ",金额:" + request.amount + "元,采购目的:" + request.purpose)
case _ => this.successor.processRequest(request)
}
}

/**
* 副董事长类
* @param name 审批人姓名
*/
class VicePresident(name: String) extends Approve(name) {
override def processRequest(request: PurchaseRequest) = request.amount match {
case x: Double if x < 100000 =>
println(s"副董事长$name 审批采购单:" + request.number + ",金额:" + request.amount + "元,采购目的:" + request.purpose)
case _ => this.successor.processRequest(request)
}
}

/**
* 董事长类
* @param name 审批人姓名
*/
class President(name: String) extends Approve(name) {
override def processRequest(request: PurchaseRequest) = request.amount match {
case x: Double if x < 500000 =>
println(s"董事长$name 审批采购单:" + request.number + ",金额:" + request.amount + "元,采购目的:" + request.purpose)
case _ => this.successor.processRequest(request)
}
}

/**
* 董事会类
* @param name 审批人姓名
*/
class Congress(name: String) extends Approve(name) {
override def processRequest(request: PurchaseRequest) =
println("召开董事会审批采购单:" + request.number + ",金额:" + request.amount + "元,采购目的:" + request.purpose)
}

package com.linewell.modeldesgin.responsechain

/**
* 测试客户端
* Created by ctao on 2015/8/30.
*/
object Client extends App {
val ZH: Approve = new Director("周华")
val YJY: Approve = new VicePresident("游建友")
val WZX: Approve = new President("吴志雄")
val meeting: Approve = new Congress("董事会")

ZH.setSuccessor(YJY)
YJY.setSuccessor(WZX)
WZX.setSuccessor(meeting)


ZH.processRequest(PurchaseRequest(45000, 1001, "大数据卡口项目"))
ZH.processRequest(PurchaseRequest(60000, 1002, "服务器购置"))
ZH.processRequest(PurchaseRequest(145000, 1003, "星环开科技专利购买"))
ZH.processRequest(PurchaseRequest(1145000, 1004, "公司并购"))


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值