淺析物件導向開發

weixin_33763244發表於2018-07-21

模擬餐廳經營。

需求:

我們現在要開一個餐廳啦,餐廳裡面有服務員,有廚師,有顧客。學習物件導向,為餐廳和幾個角色建立自己的類吧。
餐廳可以招聘或者解僱職員,職員越多,就越能夠滿足更多的顧客需求,從而賺取更多的錢
餐廳裡的容量是有限的,當顧客坐滿了,其他顧客需要排隊
服務員的工作有兩個職責,一個是負責點菜,另外一個是上菜
廚師的職責就一個,烹飪食物
顧客可以做兩件事情,一個是點菜,一個是吃

這一系列寫了很久。主要使用到的設計模式是職責鏈模式和觀察者模式。

工廠模式、命令模式、介面卡模式、橋接模式這樣的都會穿插在其中,可能是平時用習慣了,所以沒有刻意是哪種設計模式。

要有覆盤的好習慣,這個模擬還會有些視覺化的地方需要改進和新增,所以還在繼續更新。

Github中的專案與知識點

演示

職責鏈模式

這個模式給我最大的體會是,它更像一箇中轉站,用於資料處理的。用switchtype來判斷是哪一種的資訊,作出哪一種處理。

職責鏈模式可以比喻成有序火車,而火車站裡面有個函式充當時序表,但是不知道火車什麼時候到,卻知道該去哪。不好的是容易繞,得不斷順著走,繞出個邏輯來才行。

開始 >> 中轉站 >> 方法A >> 中轉站 >> 中轉站 >> ...... >> 方法B >> 中轉站 >> 方法C >> 結束

switch (type) {
  case 'A': {
    // do Something
    break;
  }
  case 'B': {
    // do Something
    break;
  }
  case 'C': {
    // do Something
    break;
  }
  case 'D': {
    // do Something
    break;
  }
}

觀察者模式

觀察者模式實現不難,但是邏輯很精密,拍手驚歎。

以模擬餐廳作為例子。顧客、服務員、廚師相互之間進行解耦。

顧客有很多,服務員和廚師也可以有很多。就會有一個類似於"管理者"的角色,可以是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
    },
  }
})();

小小的總結和覆盤。持續修改

原址:http://www.coyeah.top/2018/06/28/%E6%B5%85%E6%9E%90%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E5%BC%80%E5%8F%91/

相關文章