Swift 08 备忘录模式 Memento Pattern

/*
纪录大宏药业机器的操作日志。
药物:Aspirin、Paracetamol
工作:Wrap、Ship
操作员也返回看各个工作的纪录。
*/

// 原发器
class Mechanic {
	var p_mOperaNumber : Int = 0
	var p_stMedicineName : String = ""
	var p_stEquipOperation : String = ""
	
	func setOperaNumber(p_mInputOperaNum : Int) {
		p_mOperaNumber = p_mInputOperaNum
	}
	
	func getOperaNumber() -> Int {
		return p_mOperaNumber
	}
	
	func setMedicineName(p_stInputMediName : String) {
		p_stMedicineName = p_stInputMediName
	}
	
	func getMedicineName() -> String {
		return p_stMedicineName
	}
	
	func setEquipOperation(p_stInputEquipOper : String) {
		p_stEquipOperation = p_stInputEquipOper
	}
	
	func getEquipOperation() -> String {
		return p_stEquipOperation
	}
	
	func saveEquipMemento() -> EquipMemento {
		return EquipMemento(p_mInputOperaNum : p_mOperaNumber, p_stInputMediName : p_stMedicineName, p_stInputEquipOper : p_stEquipOperation)
	}
	
	func getEquipMemento(p_obEquipMemento : EquipMemento) -> EquipMemento {
		return p_obEquipMemento
	}
}

// 备忘录 多个备忘录物件 储存在阵列 提取阵列就可以有备忘录功能
class EquipMemento {
	var p_mOperaNumber : Int = 0
	var p_stMedicineName : String = ""
	var p_stEquipOperation : String = ""
	
	init(p_mInputOperaNum : Int, p_stInputMediName : String, p_stInputEquipOper : String) {
		p_mOperaNumber = p_mInputOperaNum
		p_stMedicineName = p_stInputMediName
		p_stEquipOperation = p_stInputEquipOper
	}
	
	func setOperaNumber(p_mInputOperaNum : Int) {
		p_mOperaNumber = p_mInputOperaNum
	}
	
	func getOperaNumber() -> Int {
		return p_mOperaNumber
	}
	
	func setMedicineName(p_stInputMediName : String) {
		p_stMedicineName = p_stInputMediName
	}
	
	func getMedicineName() -> String {
		return p_stMedicineName
	}
	
	func setEquipOperation(p_stInputEquipOper : String) {
		p_stEquipOperation = p_stInputEquipOper
	}
	
	func getEquipOperation() -> String {
		return p_stEquipOperation
	}
}

// 负责人
class OperationTaken {
	var p_arrEquipMemento : [EquipMemento] = []
	
	func addMemento (p_obMementoItem : EquipMemento) {
		p_arrEquipMemento.append(p_obMementoItem)
	}
	
	func getMemento(p_mInputOperaNum : Int) -> EquipMemento {
		return p_arrEquipMemento[p_mInputOperaNum]
	}
}

// 客戶端

var mechanic = Mechanic()
var operationTaken = OperationTaken()

mechanic.setOperaNumber(p_mInputOperaNum : 1)
mechanic.setMedicineName(p_stInputMediName : "Aspirin")
mechanic.setEquipOperation(p_stInputEquipOper : "Wrap Product")
operationTaken.addMemento(p_obMementoItem : mechanic.saveEquipMemento())

mechanic.setOperaNumber(p_mInputOperaNum : 2)
mechanic.setMedicineName(p_stInputMediName : "Paracetamol")
mechanic.setEquipOperation(p_stInputEquipOper : "Ship Product")
operationTaken.addMemento(p_obMementoItem : mechanic.saveEquipMemento())

print("Current Memento: Number:\(mechanic.getOperaNumber()) Name: \(mechanic.getMedicineName()) Operation: \(mechanic.getEquipOperation())")

var previousMemento = operationTaken.getMemento(p_mInputOperaNum : 0)

print("Previous Memento: Number:\(previousMemento.getOperaNumber()) Name: \(previousMemento.getMedicineName()) Operation: \(previousMemento.getEquipOperation())")

/*
Current Memento: Number:2 Name: Paracetamol Operation: Ship Product
Previous Memento: Number:1 Name: Aspirin Operation: Wrap Product
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值