/*
现在公司有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.
*/
留言列表