1. 程式人生 > >設計模式大總結(二)

設計模式大總結(二)

內存 對象處理 avi 設計模式 簡化 添加 rgb 負責 .cn

版權聲明:本文為博主原創文章。轉載請註明出處:http://blog.csdn.net/zhangzijiejiayou https://blog.csdn.net/zhangzijiejiayou/article/details/33292579

? ? 上篇博客給大家介紹了六大原則和設計模式之間的關系,以及創建型模式和結構型模式

(http://blog.csdn.net/zhangzijiejiayou/article/details/32712779)。

本文將給大家介紹行為型模式。

行為型模式

? ? 是對在不同的對象之間劃分職責和算法的抽象化。


技術分享圖片


? ? 觀察者模式:定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,全部依賴於它的對象都得到

通知並被自己主動更新。

? ? 長處:在解耦合,讓耦合的兩方都依賴於抽象的接口而不是詳細,從而使各自的變化都不會影響還有一邊的變化。

依賴倒轉原則的最佳體現。

? ? 缺點:抽象觀察者的接口的任務過於繁重。運用時要把握好這個尺度。

?

? ? 模板方法:定義一個操作算法骨架,而將一些步驟延遲到子類中,模板方法使得子類能夠不改變一個算法的結構

就可以又一次定義該算法的某些特定步驟。

? ? 長處:提供了一個非常好的代碼復用的平臺。非常好地體現了開放封閉原則和裏氏代換原則。

? ? 缺點:算法骨架不easy升級

? ? 模板方法能夠用橋接模式模擬實現

?

? ? 命令模式:將一個請求封裝為一個對象,從而使你可用不同的的請求對客戶進行參數化;能夠對請求排隊或記錄

請求日誌。以及支持可撤銷的操作。

? ? 長處:將調用操作的對象和知道怎樣實現該操作的對象解耦

? ? 缺點:用來運行操作的接口的任務比較繁重。

?

? ? 狀態模式:同意一個對象在其內部狀態改變時改變它的行為。讓對象看起來似乎改動了它的類。

? ? 長處:與特定狀態相關的行為局部化。而且將不同狀態的行為切割開來,狀態模式通過把各種狀態轉移邏輯分布

State的子類之間。來減少相互間的依賴

? ? 狀態模式和策略模式在模式結構圖上基本上是一樣的

?

? ? 職責鏈模式:使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這個對象連成

一條鏈,並沿著這條鏈傳遞該請求。直到有一個對象處理它為止。

? ? 長處:接收者和發送者都沒有對方明白的消息。且鏈中的對象自己也並不知道鏈的結構。減少了耦合度。

? ? 缺點:一個請求極有可能到了鏈的末端都得不到處理。或者由於沒有正確配置而得不到處理。


? ? 職責鏈和命令模式都能夠將請求的發送者和接收站之間解耦合,但運行方式不同。

?

? ? 解釋器模式:給定一個語言。定義它的文法的一種表示,並定義一個解釋器,這個解釋器使該表示來解釋語言中

的句子。

? ? 長處:easy改變和擴展文法。由於該模式使用類來表示文法法則,能夠使用繼承來改變或擴展文法。也比較easy

實現文法,由於定義抽象語法樹中各個節點的類的實現大題相似,這些類都易於直接編寫。

? ? 缺點:包括很多規則的文法可能難以管理和維護。

建議當文法非常復雜時,使用其它的技術如語法分析程序或編

譯生成器來處理。

?

? ? 中介者模式:用一個中介對象來封裝一系列的對象交互。中介者使各個對象不須要顯示地相互引用。從而使其耦

合松散。而且能夠獨立地改變他們之間的交互。

? ? 長處:減少了類之間的耦合,關註的對象從對象各自本身的行為轉移到它們之間的交互上來,也就是站在一個更

宏觀的角度去看待系統。

? ? 缺點:交互復雜性變為中介者的復雜性

?

? ? 訪問者模式:表示一個作用於某對象結構中的各元素的操作。它使你能夠再不改變各元素的類的前提下定義作用

於這些元素的新操作。

? ? 長處:數據結構和作用於結構上的操作之間的耦合度減少

? ? 缺點:添加新的數據結構變得困難。

?

? ? 策略模式:定義一系列的算法。把它們一個個封裝起來,而且使它們能夠相互替換。本模式使得算法可獨立於使

用它的客戶變化。

? ? 長處:定義了一系列的可重用的算法或行為,繼承有助於析取這些算法中的公共功能。

簡化了單元測試。

? ? 缺點:並沒有解除client須要須要推斷的壓力。

?

? ? 策略模式和簡單工廠模式結合能夠大大減輕client的職責。

?

? ? 橋接模式和策略模式

? ? 同樣:某些情況下,能夠使用橋接模式來模擬實現策略模式的功能。

? ? 不同:最基本的是模式的目的不一樣,策略模式的目的是封裝一系列的算法。使得這些算法能夠相互替換;而橋

接模式的目的是分離抽象部分和實現部分。使得它們能夠獨立地變化。

?

? ? 備忘錄模式:在不破壞封裝性的前提下,捕獲一個對象的內部狀態。並在該對象之外保存這個狀態。這樣可將該

對象恢復到原先保存的狀態。

? ? 長處:可將該對象恢復到原先保存的狀態。

? ? 缺點:假設狀態數據非常大非常多。會非常消耗內存

?

? ? 命令模式和備忘錄模式結合能夠使用備忘錄模式來存儲可撤銷操作的狀態。

?

? ? 叠代器模式:提供一種方法順序訪問一個聚合對象中各個元素,而又不需暴露該對象的內部表示。

? ? 長處:為遍歷不同的聚集結構提供如開始、下一個、是否結束、當前那一項等統一接口。分離了集合對象的遍歷

行為,抽象出一個叠代器類來負責,這樣既能夠不暴露集合內部結構。又可讓外部代碼透明地訪問集合內部的數據。

?

個人小結:

????僅僅要真正深入地理解了設計原則。非常多設計事實上就是原則的而已,也許在不知不覺中就在使用設計模式了。

亦或

我們能夠再依據設計模式的基本原則設計出更好的更有用的模式來。

就像《倚天屠龍記》中張無忌練習武當派武功的

最高境地就是“全忘記”。事實上設計模式的最高境地也是這樣,應用於無形其中。


設計模式大總結(二)