模擬餐廳經營。git
咱們如今要開一個餐廳啦,餐廳裏面有服務員,有廚師,有顧客。學習面向對象,爲餐廳和幾個角色建立本身的類吧。
餐廳能夠招聘或者解僱職員,職員越多,就越可以知足更多的顧客需求,從而賺取更多的錢
餐廳裏的容量是有限的,當顧客坐滿了,其餘顧客須要排隊
服務員的工做有兩個職責,一個是負責點菜,另一個是上菜
廚師的職責就一個,烹飪食物
顧客能夠作兩件事情,一個是點菜,一個是吃
這一系列寫了好久。主要使用到的設計模式是職責鏈模式和觀察者模式。github
工廠模式、命令模式、適配器模式、橋接模式這樣的都會穿插在其中,多是平時用習慣了,因此沒有刻意是哪一種設計模式。設計模式
要有覆盤的好習慣,這個模擬還會有些可視化的地方須要改進和添加,因此還在繼續更新。函數
演示學習
這個模式給我最大的體會是,它更像一箇中轉站,用於數據處理的。用switch
與type
來判斷是哪種的信息,做出哪種處理。設計
職責鏈模式能夠比喻成有序火車,而火車站裏面有個函數充當時序表,可是不知道火車何時到,卻知道該去哪。很差的是容易繞,得不斷順着走,繞出個邏輯來才行。rest
開始 >> 中轉站 >> 方法A >> 中轉站 >> 中轉站 >> ...... >> 方法B >> 中轉站 >> 方法C >> 結束code
switch (type) { case 'A': { // do Something break; } case 'B': { // do Something break; } case 'C': { // do Something break; } case 'D': { // do Something break; } }
觀察者模式實現不難,可是邏輯很精密,拍手驚歎。server
以模擬餐廳做爲例子。顧客、服務員、廚師相互之間進行解耦。
顧客有不少,服務員和廚師也能夠有不少。就會有一個相似於"管理者"的角色,能夠是Object或者Array。初始化的時候就發起監聽。當須要服務員或者廚師的時候,就發佈來響應監聽。而這個"管理者"的角色起到的做用就是找到空閒人員再分配任務。由於當發佈消息的時候,是會讓全部監聽者都會接收到消息。若是不以"管理者"的形式監聽,而以職員單體的形式監聽。例如當一個顧客須要服務員的時候,全部服務員都會響應,這就有點糟糕了。
let Observer = (function () { var _messages = {}; return { // 註冊信息接口 regist : function (type, fn) { // do Something }, // 發佈信息接口 fire : function (type, args) { // do Something }, // 移除信息接口 remove : function (type, fn) { // do Something }, } })();
小小的總結和覆盤。持續修改