設計模式學習

2021-06-06 19:48:50 字數 1930 閱讀 2763

所有的設計模式都是為了解決變化的問題,通過一定的模式來應對變化,變化應對的原則是開放封閉原則,對修改封閉,對擴充套件開放。

為了應對變化,就會新增相應的層次,層次越多,**的顆粒就越小,那麼**就越複雜。

所以設計時考慮變化和複雜之間的取捨,為了應對變化 ,需要使用模式,但是又不可以一味應用模式,導致**太複雜。

應該是根據軟體可能的變化部分使用模式應對變化。

黎克特制代換原則:子型別必須能夠替換掉它的父型別,is a關係。

a 策略模式 

現實模型:不同的實現部分,但是他們的對外介面是一樣的。

設計模式:抽象多一層,外部只呼叫基類,不呼叫具體的策略類。

b 合成模式 

現實模型:資料是樹型結構,而且樹節點之間存在整體和部分的包含關係。

設計模式:將樹節點的樹枝和樹葉同等對待,他們具有一樣的基類。

這樣就可以很容易的生成任何型別樹結構。

c **模式

現實模型:外部希望訪問真實的物件,但是設計者因為各種原因,可能性能或者安全考慮,讓乙個**和外部打交道,我們現實也經常有**,委託某個人幫助實施部分功能。

設計模式:**和真實物件存在關聯,然後他們繼承一樣的基類,那麼就對外有統一的功能,

結論:黎克特制代換原則實現方法都是一樣的,就是繼承同樣的基類,然後外部通過和基類打交道,基類就是這個中間層次,只要基類不變化,那麼就可以儲存對外介面不變化。

通過新增基類,對修改封閉,對擴充套件開放。

上面3個現實的模型是不一樣的,策略之間對等關係,合成是整體和部分關係,但是把他們對等看待,**模式是關聯關係,但是對外他們是對等關係。

要是現實模型的ab不滿足黎克特制代換原則,就算b不is a a ,那麼這個時候如何解決他們的關係的呢?

a 新增 基類c,讓他們同時繼承c

正方形和長方形的例子,正方形不是長方形,通過引入c 四邊形解決。

b 繼承關係改為委派關係

依賴倒轉原則:a 高層不應該依賴低層,兩個都應該依賴抽象。

b 抽象不應該依賴細節,細節應該依賴抽象。

a 工廠方法

現實模型:外部需要呼叫乙個物件,需要new乙個物件,依賴於具體物件。

設計模式:新增乙個工廠類,將這個類的例項化延遲到之類,外部就是依賴抽象,而不依賴具體型別。

b 模板物件

設計模式:抽象公共部分為基類,定義介面虛函式,延遲到子類實現。

c 迭代器模式

現實模型:需要迭代功能。只是迭代的型別不一樣。

解決辦法:統一基類迭代器,具體迭代介面函式在具體子類實現。

依賴倒轉原則,建立類的時候要不依賴具體,那麼就要建立工廠類,麻煩。同時依賴倒轉假設具體類是被修改的也是不總正確的 ,所以就是要合理使用。

介面隔離原則:應該給客戶端提供盡可能小的介面,而不要提供大介面。

合成聚合復用原則:要盡量使用合成聚合,而不要使用繼承。

區分has-a 和is -a  ,is  -a 表示乙個類是另乙個類的一種。has-a表是某乙個角色具有某一項職責。

has-a用關聯,is-a用繼承。

迪公尺特法則:如果兩個類不必彼此直接通訊,那麼這兩個類就不應發生直接的相互作用,如果其中乙個類需要呼叫另乙個類的某個方法,就通過第三者**這個呼叫。

說白了就是模組化設計,高內聚,低耦合。

高內聚:單一職責原則。

低耦合:迪公尺特法則  介面隔離原則 依賴倒轉原則    

目的是對修改封閉,對擴充套件開放。

**復用:封裝,繼承 。

通過抽象封裝,繼承,是**可以服用。

封裝的原則是:高內聚, 單一職責。

適應變化:多型機制,新增層次。

通過運用多型和新增**層,可以讓**適應變化。

層次的原則:低內聚,迪公尺特法則  介面隔離原則 依賴倒轉原則    

軟體要易於維護和適應變化,乙個復用率好的系統就是乙個容易維護的系統,乙個適應變化的系統是對修改封閉對擴充套件開發的系統。

所以**設計的原則是復用和適應變化。

學習設計模式 原型設計模式

先想一下既然要建立新的例項,為什麼不直接使用 new 而要設計出乙個原型模式進行例項的複製呢?這是因為 有的時候,我們也會在不指定類名的前提下生成例項,例如像圖形編輯器中拖動現有的模型工具製作圖形的例項,這種是非常典型的生成例項的過程太過複雜,很難根據類來生成例項場景,因此需要根據現有的例項來生成新...

設計模式學習

知道設計模式已經很久了,但是一直沒有認真的去系統的學習,這幾天才開始逐漸的學習起來。下面是我學習設計模式的一些心得。要想成為一名優秀的軟體設計師或軟體架構設計師,了解一些設計模式是很有必要的。我認為學習設計模式的思路如下 一 基本概念 理解物件導向 理解重用等概念性的東西 1.什麼是物件導向?2.物...

設計模式學習

設計模式其實就是一種 思想 就像做菜,一開始學習的人難免會問 我現在學做了幾道菜?其實,真正的精髓不在菜品,而在如何調味,如何選料,備料等 最基本的原理和法則 掌握並熟練應運了這些基本思想,才能真正的完成從 無招 到 有招 再到 無招勝有招 的至深境界。建立型模式 設計模式學習筆記 singleto...