設計模式快速學習(一)

2021-09-20 04:41:26 字數 2545 閱讀 2091

策略模式時一種定義一系列演算法的方法,從概念上看,所有這些演算法完成的演算法都是相同的工作,只是實現不同,他們可以以相同的方式呼叫所有的演算法,減少了各種演算法類與使用演算法類之間的耦合。

策略模式的strategy類層次為context定義了一些列可供重用的演算法或行為。繼承有助於吸取出這些演算法中的公共功能。

策略模式的有點時簡化了單元測試,因為每個演算法都有自己的類,可以通過自己的介面單獨測試。

當不同的行為堆砌在乙個類中時,就很難避免使用條件語句來選擇合適的行為。將這些行為封裝在乙個個單獨的strategy類中,可以在使用這些行為的類中消除條件語句。

策略模式是喲過來封裝演算法的,但是在時間中,我們發現可以用它來封裝幾乎任何的型別規則,只要在分析過程中挺好需要在不同時間應用不同的業務規則,就可以考慮策略模式處理這種變化的可能性。

單一職責原則就是乙個類而言,應該僅有乙個引起它變化的原因。

如果乙個類承擔的職責過多,就等於把這些職責耦合在乙個,乙個職責的變化可能會消弱或者抑制這個類完成其他的職責的能力。這種歐冠耦合會導致脆弱的設計,當變化發生時,設計就會遭受到意想不到的破壞。

軟體設計真正要做的許多內容,就是發現職責並把那些職責相互分離。如果你能夠想到多於乙個動機去改變乙個類,那麼這個類就多餘乙個的職責。

開放-封閉原則,就是說軟體實體(類、模組、函式等等)應該是可以擴充套件,但是不可以修改的。

這個原則其實就是兩個特徵,乙個是說「對於虧咱是開放的」,另乙個是說「對於更改是封閉的」。

怎樣的設計才能面對需求的改變卻可以保持相對穩定,從而使得系統可以在乙個版本後保持不斷推出新的版本呢?開放-封閉原則給了我們答案。

無論模組是多麼「封閉」,都會存在一些無法對之封閉的變化。既然不可能完全封閉,設計人員必須對於他設計的模組應該對哪種變化封閉做出選擇。他必須先猜測出最可能發生的變化種類,然後構造抽象物件來隔離他們的變化。

面對需求,對程式的改動是通過增加**進行的,而不是改動現有的**。

開放-封閉原則是物件導向設計的核心所在。遵循這個原則可以帶來物件導向所聲稱的巨大好處,也就是可維護、可擴充套件、可復用、靈活性好。開發人員應該對程式中呈現出頻繁變化的那寫部分做出抽象,然而,對應用程式中的每個部分都刻意地進行抽象也不是乙個好主意。拒絕不成熟的抽象和抽象本身一樣重要。

依賴倒轉原則:

a. 高層模組不應依賴底層模組。這兩個都應該依賴抽象。

b. 抽象以應該依賴細節。細節應該依賴抽象。

針對介面程式設計,不要對實現程式設計。

依賴倒轉其實可以說是物件導向設計的標誌,用那種語言來程式設計並不重要,如果編寫時考慮的都是如何針對抽象程式設計而不是針對細節程式設計,即程式中所有依賴都終止於抽象類或者介面,那就是物件導向的設計,反之就是過程化的設計了。

黎克特制替換原則:子類必須能替換掉他們的父類。

乙個軟體屍體如果使用的是乙個父類的話,那麼一定適用於其之類。二且它察覺不出父類物件和子類物件的區別。

也就是說,在軟甲那裡面,父類都替換成它子類,程式的行為沒有變化。

只有當子類可以替換掉父類,軟體的單位功能不受影響時,父類才能真正被服用,二子類也能在父類的基礎上增加新的行為。

裝飾模式:動態地給乙個物件填加一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。

裝飾模式是為已有功能動態地新增更多更能的一種方式。當系統需要新的功能的時候,時向就的類中新增新的**。這些新加的**通常裝飾了原有類的核心職責或者主要行為。在主要中家兔新的字段,新的方法和新的邏輯。從而增加了主類的複雜度。而這些新加入的東西僅僅是為了滿足一些只在某種特定情況下才會執行的類中,並讓這個類包裝他所需要裝飾的物件,因此,當需要執行特殊的行為時,客戶**就可以執行時根據需要有選擇地,按順序地使用裝飾功能包裝物件了。

把類中裝飾功能從類中搬移出去,這樣就可以簡化原有的類。有效地把核心職責和裝飾功能區分開了而且可以去除相關類中重複的裝飾邏輯。

遠端**,也就是為乙個物件在不同的位址空間提供區域性代表。這樣可以吟唱乙個對下個存在於不同位址空間的事實。

虛擬**,是根據需要建立開銷很大的物件。通過它來存放實力化需要很長時間的真實物件。

安全**,使用控制真是的訪問物件訪問時的許可權。智慧型指引,時值當呼叫真實的物件時,**處理另外一些事情。

工廠方法模式實現時,客戶端需要決定例項化哪乙個工廠來實現運算類,選擇判斷的問題還是存在的,也就是說,工廠方法把簡單工廠的內部邏輯轉移到了客戶端**來進行。你想要加功能,本來時要該工廠的,現在需要修改客戶端。

設計模式學習筆記(一) 設計模式

3 常用設計模式 4 設計模式用途 5 總結 軟體開發技術包含 招式 與 內功 其中,程式語言,開發技術,著名框架可以認為是 招式 而資料結構,演算法,設計模式,重構,軟體工程等則為 內功 招式 可以很快學會,但是 內功 的修煉需要更長的時間。對設計模式的學習會令 內功 大增,配合日益純熟的 招式 ...

設計模式學習(一)

這段時間準備著實習招聘,把以前懂一丟丟的設計模式又拿出來看看,這次看的書,主要是 大話設計模式 偶爾翻一翻經典的 設計模式 這幾天看的是簡單工廠模式 工廠方法模式 抽象工廠模式 策略模式。覺得它們有相似之處,所以在這裡寫下感想。如有錯誤,敬請指正 如果有人看的話 幾個子類繼承基類的方法,並且各自實現...

快速學習C 設計模式之職責鏈模式

職責鏈模式簡介及uml 職責鏈也叫責任鏈,他是一種行為型模式,它為請求建立了乙個接收請求者物件的鏈,並將請求沿著這條鏈傳遞到目標物件去處理。該模式最簡單的實現方式就是運用黎克特制替換原則,對每個職責所持有的物件進行抽象,並使得每個職責物件都擁有共同的父類,通過對外提bvsmtb供出具有一般意義的介面...