接上篇 設計模式,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...