設計模式學習總結

2022-01-24 02:08:12 字數 2781 閱讀 2454

乙個月帶著讀看完了設計模式,其中有一些模式真的是被坑著了,比如composite組合模式如果不用葉節點,真說不出有什麼特性。再比如備忘錄模式,我覺得這個模式的核心是打包傳遞資料,而不是用來備忘。好了,先寫乙個總結,以後慢慢消化

每個模式如果細說肯定不是三言兩語可以概括的,但是需要簡略概括,才能快速理解。

簡單工廠模式

針對乙個型別多個子類的建立控制,或者說針對乙個介面多種實現的控制。

最早的時候對於抽象類我有這樣乙個問題,介面前面加i,抽象類前面是不是應該加abs。這個問題糾結了很久,後來突然明白了

抽象類就是乙個型別的統稱

鳥 = 鷹

鳥 = 麻雀

不存在任何加abs字首的理由。扯遠了。。

簡單工廠就是這樣乙個管理工具,不用自己再去new,再去找了。方便了**的使用者

鳥 = 鳥工廠.鷹();

工廠模式,抽象工廠模式

這個沒弄明白,目前的理解是。針對建立的建立,而進行管理。

可以把多個工廠混合在一塊,而他們的建立提取為介面。

目前實際專案還沒用到過

裝飾器模式

簡單來說,就是乙個鍊錶不斷的加東西,當最後執行時,回溯回去

遊戲中buff疊加計算也可以用這個模式

可能無意中就會用到這個模式

組合模式

這個模式就是裝飾器模式的樹形結構版本

這個模式比較噁心。。說2點個人想法。

第一 不用葉節點,當前節點的子節點用null代替。效果一樣

第二 這個模式的特點是把獲取資料和節點搜尋分開成2個介面(安全型和透明型,其中透明型違反了李氏代換原則)。真的不知道看完之後學到了什麼

命令模式

把命令的請求者和命令的執行者分開,如果發現乙個類同時扮演這2個角色,就要考慮這個模式了。

是在請求者和執行者中間加乙個"命令管理器",命令的請求者在需要的時候給命令管理器新增任務就可以了。

行為型模式往往是思路的轉變,要在使用中理解。 

職責鏈模式

這個模式個人感覺不錯,**可讀性加分

舉個例子,某某boss帶一群小弟出去吃飯

boss只管吃飯,聊天,付錢。他不會去管選哪家酒店,這家酒店停車位在哪,停車如何收費,怎麼預定,點餐方式是什麼樣的等等。這些都是他的小弟去完成的

這個模式的關鍵在於,判斷能不能做can slove,和去做do something是分開的。這樣邏輯劃分明確,**可讀性也就提公升了

狀態模式

首先這個模式千萬別和switch case搞混了,完全就不是這種思路了

職責鏈模式是,乙個環形鍊錶不停的迴圈(直接for迴圈也可)。遇到能解決的就跳出迴圈。

狀態模式是,乙個普通鍊錶的指標一直在到處亂跳,可能會跳到結尾就沒了,或者各種狀態跳個沒完。

它用來解決switch case, if else過多的情況。但在可讀性上反而弱了。switch case比較穩定的情況下,千萬別用。

原型模式

我剛開始看原型模式的時候,認為這個和組合模式一樣坑爹的玩意。。

後來無意中看了一篇博文,才發現是我用的思路不對,其實在**中是會經常用到的

我們經常要把乙個東西備份乙份出來,以後再用來對比。c#是自帶了clone的

如果不用原型模式,就要把值型別引數乙個乙個儲存下來,等用到的時候再乙個乙個對比(備忘錄模式)

備忘錄模式

備忘錄模式重點不在備忘錄上,而是它通過資料報傳輸資料的概念。

類之間互相傳遞的始終都是乙個「包」,你不知道是什麼。只有用解析的類解析完了,才知道裡面是什麼。

這個模式用的也不多

訪問者模式

這個模式的uml類圖確實有點繞,為了實現動態的函式增加,其實不止這一種方法,可以有很多方法

訪問者模式這樣做,效能損失是最小的。它不需要判斷型別,都是過載的。

這個模式很容易誤用,子類的數量要穩定這個不說了。

增加的功能,確認是不是每個子類都需要有這個新功能,如果就其中1,2個子類需要。考慮單獨弄乙個別的類,作為引數傳進去處理(use a)

確定了之後,再選用模式。 

單例模式

單例並非只有乙個例項的模式。

執行緒池,遊戲子彈池這種數量約束概念的東西,也可以用上單例

單例是對例項物件數目的乙個約束,懶漢惡漢型我覺得不必過於糾結

facade外觀模式

設計模式有4,5種是即使不學設計模式,也會無意中用到的。

外觀模式就在這其中。

本來我認為沒啥用,今天看敏捷開發又看到這個模式,就記一下好了。

mediator中介者模式

外觀模式是對外一致訪問,達到降低耦合的目的。

而中介者模式,是對內部的乙個一致訪問。

它把內部模組的互動部分,合併到乙個中介者類裡面去了。

把普通**重構成中介者模式也很簡單,先保持對外函式不變,然後把函式裡面的實現過程移到中介者類裡面實現。

除非有明顯的共性可以提取出來,否則用中介者模式就會有濫用模式的狀況,會更難以拓展。

好了,就寫這個多。還有些模式根本用不到。

另外,推薦 設計模式縱橫談 這個講座,在優酷上可以看到。講的非常好

把一件事物放到乙個時間線上去看待,從變化和不變化中,看出用這個模式和不用這個模式的區別

設計模式學習總結

之前一直是面向過程程式設計,前段時間因為某些原因需要更好的去理解一下物件導向思想精髓,在別人的推薦下看了 大話設計模式 這本書。通過對29個模式的學習,不僅僅了解了設計模式是個什麼回事,也稍微加深了一點對物件導向 object oriented 技術。物件導向技術關注的是物件,物件的優點在於,可以定...

設計模式 學習總結

設計模式是解決問題的方案,學習現有的設計模式可以做到經驗復用。擁有設計模式詞彙,在溝通時就能用更少的詞彙來討論,並且不需要了解底層細節。確保乙個類只有乙個例項,並提供該例項的全域性訪問點。實現 使用乙個私有建構函式 乙個私有靜態變數以及乙個公有靜態函式。1 懶漢式 執行緒不安全 public cla...

設計模式學習總結

這兩天在看broadview的.net與設計模式一書。發現這本書的觀點很有道理,雖然今天剛把singtelon模式做了乙個總結,但是從學習設計模式的路上往回倒一步,先寫乙個學習設計模式應該注意的地方。我覺得要注意的主要有以下幾點 1.不要把設計模式當作解決方案,儘管gof的設計模式中更加偏重於解決方...