設計模式,Let s 「Go」! 下

2022-01-29 22:52:34 字數 1705 閱讀 9729

接上篇 設計模式,let's 「go」! (中), 繼續更新設計模式,今天介紹的設計模式有責任鏈模式、蠅量模式、直譯器模式、中介者模式、備忘錄模式、原型模式和訪問者模式;

文章對設計模式的特點和使用場景進行了總結,每個設計模式分配的篇幅較少,給了解過設計模式的作為速查,幫不了解設計模式的入門, 當然具體實現才是重點,使用現實生活中的事物例子來幫助理解設計模式。

正文開始:

責任鏈模式:將請求處理者串成「鏈」依次嘗試處理請求,以此解耦請求和處理者;

公司裡 leader、經理和ceo有不同額度的報銷限額;

leader報銷不了的金額交給經理,而經理將自己處理不了的給ceo處理;

張三要報銷200元,leader就能批准;

李四要報銷8000元,leader報銷不了,就交給經理,經理也處理不了,最後交給ceo報銷;

蠅量模式:使用乙個物件儲存和模擬多個虛擬物件,大大減少多個物件的記憶體占用。

直譯器模式:定義一種方法和對應的直譯器,使用直譯器解釋此方法的語句來執行;

在php中,php環境是上下文;

字串值不能再向下解釋了,如"hello" "greeting"都是終結符;

在上下文中定義了兩個變數$greeting = "hello"; $test = "greeting";

現在來解釋變數$$test = "hello";

中介者模式:通過乙個中介物件封裝多個物件之間的互動,解耦各個物件之前的相互依賴;

聯合國作為多個國家之間的中間人存在,各國家之間通過聯合國溝通;

法國和南韓嘗試通過聯合國隔空對話;

他們雙方只向聯合國喊話,並從聯合國處獲取對方國家的回應;

備忘錄模式:使用乙個備忘錄物件記錄並儲存物件內部狀態,並能隨時恢復到儲存的狀態;

時光掌控者儲存著許多人類世界的「時間快照」;

小明18歲時身高175,體重70,時光掌控者此時獲取小明的資訊產生了乙個快照;

小明在不停地長大,80歲時身高170,體重65;

時光掌控者選擇小明18歲的快照對小時進行了恢復,小明又回到了18歲;

原型模式:通過複製原型物件修改屬性的方式來快速建立新物件;

據說國家儀仗隊的隊員都是 年齡20歲、身高180、體重72kg的男性士兵;

抽象乙個「年齡20歲、身高180、體重72kg」的人作為儀仗隊員的「原型」;

建立乙個儀仗隊員原型,並設定姓名來產生乙個真實的儀仗隊員物件;

訪問者模式:將對一些物件的訪問過程抽象出類,以實現在不改變物件的前提下對這些物件新增操作;

超市裡的商品都有 名稱和** 兩種屬性,顧客使用購物車儲存了要買的商品;

設定乙個印表機訪問者,訪問並列印顧客購物車內的商品名稱;

如果要新增乙個商品**計算器,只需要實現與印表機相同的訪問者介面,訪問並計算購物車中商品的**;

最後說一下設計模式的分類,根據設計模式所針對的問題,將設計模式分為三類:

設計模式的目標,是用來解決通用問題的。乙個專案也不可能只有一種問題,所以在真正的使用中,還是要將不同的設計模式組合使用,總而言之:多想、多寫

設計模式,Let s 「Go」! 中

接上篇 設計模式,let s go 上 繼續更新設計模式,今天介紹的設計模式有模板模式 迭代器模式 組合模式 狀態模式 模式 橋接模式和建造者模式 文章對設計模式的特點和使用場景進行了總結,每個設計模式分配的篇幅較少,給了解過設計模式的作為速查,幫不了解設計模式的入門,當然具體實現才是重點,使用現實...

設計模式學習(下)

對於掌握了一定設計模式知識的人,如何才能更進一步掌握 才能熟練應用設計模式,是一項迫切而且艱鉅的任務,所以根據自己的知識水平,我決定系統得分析設計模式知識結構,為更進一步分析各個設計模式做好知識和方法準備。是軟體的產生直到報廢的生命週期,包括問題定義 可行性分析 總體描述 系統設計 編碼 除錯和測試...

golang視角下的設計模式

單利模式 func newsingleton singleton return instance func newsingleton singleton return instance func newsingleton singleton return instance func newsingl...