以賣單車為例形象理解23種設計模式

localhost02發表於2018-12-21

title: 以賣單車為例形象理解23種設計模式 tags: [形象理解,23種設計模式] categories: 設計模式 date: 2017-06-20 10:27:00

建立型模式

故事一:取單車

1.我可以通過摩拜單車工廠的Mobike(方法)和MobikeLite方式可以拿到不同型別的單車。-工廠方法模式 2.幫人借車,同事給我發簡訊叫我幫他去先搶一輛單車,我根據他發的簡訊內容:“Mobike”(或者“MobikeLite”),從而知道具體要給他從摩拜單車工廠搶哪一種型別的車。-簡單工廠模式 3.據我所知,成都有一個共享單車工廠(抽象工廠),專門負責提供共享單車。單車工廠裡有摩拜單車工廠、一步單車工廠、ofo單車工廠、永安單車工廠等,而就摩拜單車工廠而言,就有Mobike、MobikeLite兩種不同方式獲取不同型別的單車,其他工廠可能也有一種或多種方式獲取各自工廠不同型別的單車。-抽象工廠模式

故事二:一輛單車用遍天

1.椿哥(主角)感覺共享單車銷路好,於是自己開了一個單車旗艦店:椿哥號單車(類)。但是由於成本有限,只定做了一輛椿哥號單車(例項)。一個人掃碼用完之後,其他人才可以繼續掃碼使用。-餓漢式單例模式 2.椿哥發現生意不是很好,打算換個思路。這次不先定做單車了,而是當有人需要用車時,我才生產一輛單車(當然同樣是用完其他人才能繼續使用)。-懶漢式單例模式

故事三:造個親兄弟

1.在使用摩拜單車的時候,我發現某輛單車操控性、強度都灰常棒,於是找生產商給我獨家定製一輛一模一樣的單車,必須是所有效能指標都相同。-克隆模式

故事四:多樣化定製

1.公司一群同事要去西嶺雪山耍,我提前通知了摩拜單車生產商,讓他們給我生產12輛後碟剎好、安全性強的MobikeLite單車。-建造者模式

構造型模式

故事一:增強單車

1.後來椿哥開始轉行賣單車。由於發現購入的單車輪子小,騎不快,於是椿哥把從狗剩那兒買來的單車(例項)換成了大輪子,併為單車新增了一個尾燈。現在其他人都在椿哥這兒買單車,而不在狗剩那兒買了。-裝飾模式

故事二:控制單車

1.椿哥又覺得椿哥號單車上的尾燈亮著太刺眼了,容易造成安全事故。於是讓所有生產的單車都把尾燈遮起來(對使用者隱藏),並賣給了使用者。-代理模式

故事三:為使用者適配單車

1.使用者反饋單車坐墊太硬,屁股受不了。一看發現自己生產的椿哥號單車的坐墊沒有某種型別的彈簧,而狗剩牌單車有。問他要,他卻不給,他說除非讓他的品牌冠名。於是乎,我的單車叫做:繼承自狗剩牌的椿哥號單車,從而我的單車坐墊有了這種彈簧功能,使用者也很滿意。-類的介面卡模式 2.椿哥發現,冠名了(實現)狗剩牌單車需要把狗剩牌公司所有的單車生產規定(介面方法)都定製在自己生產的單車上面,這是不能容忍的。於是,椿哥開了一個外殼公司(抽象類),讓這個公司生產單車的規定都符合狗剩牌單車生產規定,但是就是不生產單車。另一方面,椿哥實際的這個公司讓這個外殼公司冠名(繼承於)。這樣,實際公司生產單車的規定只需要符合外殼公司生產單車的規定就行,不符合都沒關係(畢竟都是自己公司嘛,自己說了算)。-介面的介面卡模式 3.經過上面的偷樑換柱,椿哥還是越想越窩囊。於是椿哥把狗剩家的單車(例項)偷了過來,把單車上的那個功能性彈簧安到了自己生產的單車上。於是,椿哥的單車同樣叫椿哥號單車,單車的坐墊也同樣具備了這種彈簧功能,使用者同樣也灰常滿意。-物件的介面卡模式

故事四:多樣化的需求

1.椿哥公司有兩種品牌的單車:Mobike、MobikeLite(抄襲摩拜的)。而有些使用者需要Mobike小輪子,於是生產Mobike小輪子單車;有些使用者需要Mobike大輪子,於是生產Mobike大輪子單車;還有些需要MobikeLite小輪子或者大輪子,也就得生產相應小輪子、大輪子的MobikeLite,這很麻煩!於是椿哥採取這種方式:只生產兩種型別的單車Mobike、MobikeLite(均無輪子),再生產兩種型別的輪子:小輪子、大輪子,最後改造單車使單車換輪子變得方便。於是使用者需要小輪子MobikeLite,就把小輪子安到MobikeLite上面;需要Mobike大輪子,就把大輪子安到Mobike上面……。-橋接模式

故事五:一體化

1.椿哥單車的尾燈在剎車時需要手動控制才能亮,剎車也需要手動控制。於是椿哥做了一個剎車器:一緊握剎車器,剎車能夠進行剎車,尾燈也可以發光;一鬆開剎車器,剎車立馬結束,尾燈也停止發光。-外觀模式

故事六:集中化管理

1.現在椿哥也玩共享單車了,但是謹慎的他覺得,單車放到路邊到處都是,一點也不安全,萬一丟了呢?於是他把他的共享單車全部放到指定地點,專人看管。需要用車時,管理人員給你推出來,還車時又放回去。-享元模式(參見資料庫連線池的實現)

故事七:單車編號回收

1.現在的使用者太難伺候了,使用者們把用完的單車隨處一放就完事,根本不按照規定放回椿哥指定的地點。因此每到了晚上,椿哥還得一輛一輛地按照單車編號進行回收。鑑於此,椿哥提出了一個叫做單車體的概念。單車體裡面包含一輛單車,一個儲存器。儲存器裡面分別儲存上一編號單車所處位置(物件引用)和下一編號單車所處位置(物件引用)。這樣,找到單車時就可以根據單車體中的儲存器找到上一編號的單車和下一編號的單車了。-組合模式(參見二叉樹、連結串列的實現)

行為型模式

故事一:動態定製輪胎

1.椿哥號單車的輪胎是直接購入的其他廠商生產的高效能輪胎。有李鐵蛋廠商的越野車用輪胎(演算法),也有王大炮廠商的休閒車用輪胎(演算法)。客戶有哪種需求(爬坡?休閒?),椿哥的生產部門(環境)就用相應廠商提供的輪胎(演算法)給客戶生產相應功能的單車。-策略模式

故事二:品牌化的椿哥號單車

1.椿哥號單車已成為一個品牌,其他廠商都想冠名(繼承)椿哥號單車,但是各個廠商都有不同的單車生產風格:有山地型的,有街型的,還有雜技車。於是椿哥把椿哥號單車一部分功能(公有的部分)自己實現了,其他有分歧的標記了一個空位,如輪胎空位、剎車空位。其他廠商繼承椿哥號單車後,以自己的方式實現了這些個空位,問題解決了。-模板方法模式

故事三:偏題的單車研究

1.椿哥最近在研究一款新型單車,它有一個尾燈,並且這個尾燈的實現原理灰常有意思:一個發光系統,裡面含有一個燈和一個指示器,燈完全按照指示器工作。即指示器標記紅時發紅光,標記綠時發綠光;一個控制器,內含一個指示選擇按鈕(直接與發光系統的指示器相連),一個發光按鈕(與發光系統的燈相連)。它是這樣工作的:指示選擇按鈕選擇紅,此時發光系統的指示器馬上標記為紅,點選控制器的發光按鈕,發光系統的燈開始運作,判斷指示器的標識,發現為紅色,於是發紅光。-狀態模式

故事四: 車速備份

1.為了給單車製造黑匣子,椿哥嘗試將單車車速進行一個手動備份:單車(類)有一個車速指標(屬性),同時備份檔案也有一個車速變數(用於記錄單車的車速)。使用者手動按下單車上的備份按鈕,單車內建的備份程式(方法)將車速複製到備份檔案的車速變數上面。而這個備份檔案怎麼儲存呢,那就放進一個儲存器裡吧(支援備份檔案的讀出和寫入)!-備份模式

故事五:尾燈的思考

1.椿哥認為,單車尾燈和控制按鈕聯絡太緊密了,通過一條線來控制,如果線斷了或者接觸不良怎麼辦?於是他打算借用無線遠端中轉點(只用於該發光訊號轉發)來進行改進:按下按鈕,傳送“我需要發光”內容的無線訊號到遠端中轉點,遠端中轉點同樣傳送“我需要發光”內容的無線訊號到尾燈,尾燈接受訊號後發光。-命令模式

故事六:椿哥號單車公司公款報銷問題

1.椿哥號單車公司的專案經理只有報銷500元的權利,超過了,他會把報銷任務交給部門經理;部門經理只有報銷1000元的權利,超過了,他也會把報銷任務交給總經理;總經理只有報銷2000元的權利……-責任鏈模式

故事七:檢查回收的共享單車

1.椿哥的共享單車每晚都要進行回收(大家眾所周知的)。一般回收都是用大卡車拉回來(一輛大卡車裡有很多輛單車)。拉回來之後還要進行質檢,檢視是否有單車被損毀。於是,椿哥做了一個系統,讓單車在大卡車裡就通過遍歷而進行單輛地質檢:首先為所有的大卡車配備一套集合遍歷系統,通過點選大卡車的“錄入單車到遍歷集合”按鈕就可以將大卡車中所有單車資訊錄入到集合遍歷系統中。而集合遍歷系統,椿哥也為其寫好了集合遍歷功能。於是呼叫之,得到每輛單車資訊,然後分析其各項指標是否通過質檢。這樣就完成了這個事情。-迭代子模式(參見迭代器的實現)

故事八: 剎車的通知

1.椿哥的單車突然需要這樣一個功能了,即單車的剎車系統功能的損毀需要通知給其他系統,如尾燈系統、備份系統。那麼如何通知到其他系統上面去呢?椿哥是這樣做的:將其他功能系統都通過一根線(引用)聚集到剎車系統的一個集中存放點中。需要通知時,拿出每條線的接頭,向裡面傳送相應訊號就可以通知到各個系統中去了。-觀察者模式

故事九:相互聯絡的解耦問題

1.單車的車速計算系統和備份系統是相互關聯的,即車速計算系統在運作了,而備份系統必須要執行著;備份系統運作著,車速計算系統也必須在執行。椿哥覺得如果直接進行聯絡,兩個系統就太緊密了,不符合他程式設計師的編碼風格。於是,決定解耦:使用了一個公用系統,它同時具有開啟兩個系統的功能。備份系統啟用後,馬上命令公用系統開啟車速計算系統,車速計算系統也就執行了;而車速計算系統啟用後,也會立即命令公用系統開啟備份系統,備份系統也就執行了。-中介者模式

故事十:訪問車速資料

1.椿哥想插腳大資料領域:想通過分析眾多使用者使用單車的車速情況來得到一些寶貴的大資料資源。需求是這樣的:遠端的線上分析系統要去訪問單車的車速備份系統,以拿到車速資料。實現是這樣的:線上分析系統先申明,我只能訪問單車的車速備份系統(不能什麼系統都訪問,不然對使用者太危險了),讀取備份功能可以將備份系統的車速資料讀取到。而車速備份系統同樣嚴厲宣告,我可以開放訪問介面,但是隻允許線上分析系統訪問(不然我也太危險了)。同時車速備份系統提供被讀取功能,功能會呼叫線上分析系統的讀取備份功能以訪問自己的車速資料。-訪問者模式

故事十一:椿哥的自白

1.椿哥:直譯器模式參見正規表示式的實現。 最後椿哥通過研究單車走上了人生頂峰……

相關文章