Swift 04 观察者模式 Observer Pattern

/*
现在公司有3个理货员、分别处理阿司匹林、扑热息痛和抗组胺药。
当需要出货时、3人会通知大家、一起出货。
在不新增新线程、3人都不需要有对方资料、不需要持有特别广播的通讯控件的情况下、也能通知大家。

公司:大宏药业生产部

职员:
卡卡、阿司匹林
路飞、扑热息痛
白云:抗组胺药

动作:
出货(药名 : 药品)
*/

// 抽象觀察者
class Observer {
	var p_stName : String = ""
	func getName() -> String { return p_stName }
	func setName(p_stInputName : String) { }
	func completeMission() { }
	func shipProduct(p_obBossOffice : BossOffice) { }
	func help() { }
}

// 具體觀察者
class Employee : Observer {
    var p_stEmployeeName : String = ""
	
	init(p_stInputName : String) {
		p_stEmployeeName = p_stInputName
	}
	
	override func getName() -> String {
	    return p_stEmployeeName
	}
    
    override func setName (p_stInputName : String) {
        p_stEmployeeName = p_stInputName
    }
	
	override func completeMission() {
		print("\(p_stEmployeeName) completes works.")
	}
	
	override func shipProduct(p_obBossOffice : BossOffice) {
	   print("\(p_stEmployeeName) ships products.")
	   p_obBossOffice.notifyObserver(p_stInputEmployeeName: p_stEmployeeName)
	}
	
	override func help() {
		print("\(p_stEmployeeName) comes to help.")
	}
}

// 目标类
class Company {
	var p_stCompanyName : String = ""
	var p_arrEmployees: [Observer] = []
	
	func setCompanyName (p_stInputComName : String) {
		p_stCompanyName = p_stInputComName
	}
	
	func getCompanyName() -> String {
		return p_stCompanyName
	}
	
	func registerEmployee(p_obObserver : Observer) { }
	
	func notifyObserver(p_stInputEmployeeName : String) { }
}

// 具体目标类
class BossOffice : Company {
	func rollCall(p_stInputTeamName : String) {
		p_stCompanyName = p_stInputTeamName
		print("\(p_stCompanyName) is built up")
	}
	
	override func registerEmployee(p_obObserver : Observer) {
	    print("Employee \(p_obObserver.getName()) joins \(p_stCompanyName)")
		p_arrEmployees.append(p_obObserver)
	}
	
	override func notifyObserver (p_stInputEmployeeName : String) {
		print("\(p_stCompanyName) notice: \(p_stInputEmployeeName) ships products. Please go to help.");
		
		for p_obEmp in p_arrEmployees {
			p_obEmp.help()
		}
	}
}

let company = Company()
let boss = BossOffice()
boss.rollCall(p_stInputTeamName : "Team B")

let KaKa = Employee(p_stInputName : "KaKa")
boss.registerEmployee(p_obObserver : KaKa)

let LuFei = Employee(p_stInputName : "LuFei")
boss.registerEmployee(p_obObserver : LuFei)

let BaiYun = Employee(p_stInputName : "BaiYun")
boss.registerEmployee(p_obObserver : BaiYun)

LuFei.shipProduct(p_obBossOffice : boss)

/*
Team B is built up

Employee KaKa joins Team B
Employee LuFei joins Team B
Employee BaiYun joins Team B

LuFei ships products.

Team B notice: LuFei ships products. Please go to help.
KaKa comes to help.
LuFei comes to help.
BaiYun comes to help.
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值