設計模式 Design Pattern

設計模式

策略模式

對一系列的算法定義,並將每個算法封裝起來,並且使它們還能夠相互替換。策略模式讓算法獨立於使用它的客戶而獨立變化。算法

clipboard.png

設計原則 1

找出應用中可能須要變化之處,把他們獨立出來,不要和那些不須要變化的代碼混在一塊兒編程

設計原則 2

多用組合,少用繼承設計模式

設計原則 3

針對接口編程,而不是針對實現編程spa

觀察者模式

reference
定義了對象之間的一對多依賴,這樣一來,當一個對象改變狀態時,它的全部依賴者都會收到通知並自動更新設計

設計原則 4

爲了交付對象之間的鬆耦合設計而努力
clipboard.png3d

裝飾者模式

動態地將責任附加到對象上。若要拓展功能,裝飾者提供了比繼承更有彈性的替代方案。代理

clipboard.png

優勢調試

一、裝飾者模式能夠提供比繼承更多的靈活性
二、能夠經過一種動態的方式來擴展一個對象的功能,在運行時選擇不一樣的裝飾器,從而實現不一樣的行爲。
三、經過使用不一樣的具體裝飾類以及這些裝飾類的排列組合,能夠創造出不少不一樣行爲的組合。可使用多個具體裝飾類來裝飾同一對象,獲得功能更爲強大的對象。
四、具體構件類與具體裝飾類能夠獨立變化,用戶能夠根據須要增長新的具體構件類和具體裝飾類,在使用時再對其進行組合,原有代碼無須改變,符合「開閉原則」。日誌

缺點code

一、會產生不少的小對象,增長了系統的複雜性
二、這種比繼承更加靈活機動的特性,也同時意味着裝飾模式比繼承更加易於出錯,排錯也很困難,對於屢次裝飾的對象,調試時尋找錯誤可能須要逐級排查,較爲煩瑣。

裝飾者的使用場景
一、在不影響其餘對象的狀況下,以動態、透明的方式給單個對象添加職責。
二、須要動態地給一個對象增長功能,這些功能也能夠動態地被撤銷。當不能採用繼承的方式對系統進行擴充或者採用繼承不利於系統擴展和維護時。

工廠模式

命令模式

將請求封裝成對象,以便使用不一樣的請求,隊列或日誌才參數化其餘對象

clipboard.png

適配器模式

模板方法模式

迭代器模式

提供一種方法順序訪問一個聚合對象中的各個元素,而不暴露其內部的表示

設計原則 5

單一責任,一個類應該只有一個引發變化的緣由。
內聚:度量一個類或模塊緊密地達到單一目的或責任。

組合模式

容許講對象組合成樹形結構來表現「總體/部分」層次結構。組合能讓客戶以一致的方式處理個別對象以及對象組合

狀態模式

容許對象在內部狀態改變時改變它的行爲,對象看起來好像修改了它的類。
這個模式將狀態封裝成爲獨立的類,並將動做委託到表明當前狀態的對象

clipboard.png

代理模式

代理模式和裝飾者模式的區別:

裝飾者爲對象添加行爲
代理是控制對象的訪問

clipboard.png

遠程代理

clipboard.png

虛擬代理

一種經常使用的代理模式,對於一些佔用系統資源較多或者加載時間較長的對象,能夠給這些對象提供一個虛擬代理。
在真實對象建立成功以前虛擬代理扮演真實對象的替身,而當真實對象建立以後,虛擬代理將用戶的請求轉發給真實對象。

動態代理

相關文章
相關標籤/搜索