浅析面向对象开发
模擬餐廳經營。
需求:
我們現在要開一個餐廳啦,餐廳里面有服務員,有廚師,有顧客。學習面向對象,為餐廳和幾個角色創建自己的類吧。餐廳可以招聘或者解雇職員,職員越多,就越能夠滿足更多的顧客需求,從而賺取更多的錢
餐廳里的容量是有限的,當顧客坐滿了,其他顧客需要排隊
服務員的工作有兩個職責,一個是負責點菜,另外一個是上菜
廚師的職責就一個,烹飪食物
顧客可以做兩件事情,一個是點菜,一個是吃
這一系列寫了很久。主要使用到的設計模式是職責鏈模式和觀察者模式。
工廠模式、命令模式、適配器模式、橋接模式這樣的都會穿插在其中,可能是平時用習慣了,所以沒有刻意是哪種設計模式。
要有復盤的好習慣,這個模擬還會有些可視化的地方需要改進和添加,所以還在繼續更新。
Github中的項目與知識點
演示
職責鏈模式
這個模式給我最大的體會是,它更像一個中轉站,用于數據處理的。用switch與type來判斷是哪一種的信息,作出哪一種處理。
職責鏈模式可以比喻成有序火車,而火車站里面有個函數充當時序表,但是不知道火車什么時候到,卻知道該去哪。不好的是容易繞,得不斷順著走,繞出個邏輯來才行。
開始 >> 中轉站 >> 方法A >> 中轉站 >> 中轉站 >> ...... >> 方法B >> 中轉站 >> 方法C >> 結束
switch (type) {case 'A': {// do Somethingbreak;}case 'B': {// do Somethingbreak;}case 'C': {// do Somethingbreak;}case 'D': {// do Somethingbreak;} }觀察者模式
觀察者模式實現不難,但是邏輯很精密,拍手驚嘆。
以模擬餐廳作為例子。顧客、服務員、廚師相互之間進行解耦。
顧客有很多,服務員和廚師也可以有很多。就會有一個類似于"管理者"的角色,可以是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/
總結
- 上一篇: MyBatis超详细介绍——SQL语句构
- 下一篇: 购物商城Web开发第十二天