居間協調者模式
將物件之間的複雜溝通和控制方式簡化。
書本範例:當BOB按了打盹按鈕
1.鬧鐘要告訴咖啡壺煮咖啡
2.周末不煮咖啡
3.洗澡前關閉灑水器15分鐘
4.丟垃圾的日子鬧鐘設定提前
...

...
鬧鐘
onEvent(){
checkCakebdar() //檢查日曆
checkSprinkler() //檢查灑水器
startCofee() //開始煮咖啡
//更多...
}
咖啡
onEvent(){
checkCakebdar() //檢查是否周末
checkSAlarm()//檢查鬧鐘
//更多...
}
日曆
onEvent(){
checkDayOfWeek() //是不是周末
doSprinkler() //灑水
doCoffee() //做咖啡
doAlarm() //鬧鐘響
//更多...
}
灑水器
onEvent(){
checkCalendar() //檢查日曆
checkShower() //檢查洗澡前
checkTemp() //檢查溫度
checkWeather() //檢查天氣
//更多...
}
.
加入居間協調者

協調者
if(alarmEvent){ //鬧鐘事件
checkCalendar() //檢查灑水器
checkShower() //檢查洗澡前
checkTemp() //檢查溫度
//更多...
}
if(weekend){ //假日
checkWeather()
//更多...
}
if(trashDay){ //到垃圾日子
resetAlarm() //設定鬧鐘
//更多...
}
每個物件都會在自己的狀態改變時,通知居間協調者
每個物件都會對協調者所發出的請求做出回應
居間協調者優點:
分工明確,物件間彼此都不知道對方的存在,物件重複利用的可能性大增。
控制邏輯集中,可以簡化系統維護。
居間協調者缺點:
隨著專案日漸龐大,function 也會越來越難以維護。