天天看點

Swift 06 職責鍊模式 Chain of Responsibility

/*
大宏藥業管理層

行政總裁 卡卡: 審批3萬元以下訂單
經理 路飛:審批2萬元以下訂單
主任 白雲:審批1萬元以下訂單

代碼有錯誤、不能運作
*/

class RequestOrder {
	var p_doAmount : Double = 0.0
	var p_mOrderNum : Int = 0
	var p_stProductOrder : String = ""
	
	init(p_doInputAmount : Double, p_mInputOrderNum : Int, p_stInputProductOrder : String){
		p_doAmount = p_doInputAmount
		p_mOrderNum = p_mInputOrderNum
		p_stProductOrder = p_stInputProductOrder
	}
	
	func setAmount(p_doInputAmount : Double) {
		p_doAmount = p_doInputAmount
	}
	
	func getAmount() -> Double {
		return p_doAmount
	}
}

class Approver {
	var successor = Approver()
	var p_stAppName : String = ""
	
	func approver (p_stInputApprName : String) {
		p_stAppName = p_stInputApprName
	}
	
	func setSuccessor(p_obSucessor : Approver) {
		successor = p_obSucessor
	}
	
	func processRequest(p_obInputOrder : RequestOrder) { }
}

class Director : Approver {
    var p_stDirectorName : String = ""
    
	init(p_stInputName : String) {
		p_stDirectorName = p_stInputName
	}
	
	override func processRequest(p_obInputOrder : RequestOrder) {
		if(p_obInputOrder.getAmount() < 100000) {
			print(" \(p_stDirectorName) approves \(p_obInputOrder.getAmount)")
		} else {
			successor.processRequest(p_obInputOrder: p_obInputOrder)
		}
	}
}

class Manager : Approver {
    var p_stManagerName : String = ""
    
	init(p_stInputName : String) {
		p_stManagerName = p_stInputName
	}
	
	override func processRequest(p_obInputOrder : RequestOrder) {
		if(p_obInputOrder.getAmount() < 200000) {
			print("Manager \(p_stManagerName) approves \(p_obInputOrder.getAmount)")
		} else {
			successor.processRequest(p_obInputOrder: p_obInputOrder)
		}
	}
}

var KaKa = Director(p_stInputName: "KaKa")
var LuFei = Manager(p_stInputName: "LuFei")

KaKa.setSuccessor(p_obSucessor: LuFei)

var p_obRequestOrder = RequestOrder(p_doInputAmount: 1000.0, p_mInputOrderNum: 1, p_stInputProductOrder: "Paracetamol")

KaKa.processRequest(p_obInputOrder: p_obRequestOrder)
           

繼續閱讀