物件導向設計原則和設計模式

2021-10-04 01:35:57 字數 2696 閱讀 9326

誰來建立另乙個類的示例?

對於類a和類b,滿足下列條件

1.b包含a

2.b記錄a

3.b和a關係很密切

4.b擁有a例項化所必需的示例

則應該由b來建立a的例項,其中1、2優先

為乙個物件分配職責的一般原則是什麼?

誰具有完成一件事情所必須的資訊,就把職責分配給它

步驟:

1.把職責描述清楚

2.設計模型中有沒有相關的類能做這件事

3.如果沒有,就在領域模型中找

如何保證設計方案支援低的依賴性、低的變化影響度、增加可重用性?

耦合:兩個子模組之間聯絡的強度

低耦合與其他原則如資訊專家、高內聚必須綜合考慮

不能單獨考慮低耦合

繼承關係中,子類和父類的耦合非常緊密(能用組合就不用繼承)

ui應該把捕捉到的系統操作,發給領域層的哪個物件?

façade controller外觀控制器:

適用於相對較小的系統

有限數量的系統操作

在訊息處理系統中,不能**訊息到可選的控制器時

use case/session controller用例控制器/會話控制器:

應用場合

當採用外觀控制器會導致高耦合、低內聚時

很多系統時間跨越多個不同的處理過程

概念上容易理解和構建

如何使物件功能專注、可理解、可管理,同時又支援低耦合?

分配職責時保持高內聚

內聚:模組內元素之間緊密聯絡的程度,比如乙個類內部的操作之間

高內聚的類:

有較少數量的操作,操作的性質基本一致,不會做太多的事情

如果同類別的工作太多,則會定義新的類分擔任務,相互間合作

如何處理依據型別不同而有不同行為的一類需求?

使用動態作為依據型別變化的行為,進行職責分配

不要去測試物件的型別或者條件邏輯,並以此選擇相應的行為

即不要使用條件邏輯,而是為不同的類定義相同名字的方法

不同的類實現了相同的介面、或者有乙個共同的父類(繼承)

如果依據資訊專家原則獲得的解決方案不適合,既不想違反低耦合、高內聚,也不想違反其他的原則,該如何把職責分配給物件?

把高度內聚的職責分配給虛構出來的乙個類,這個類在領域模型裡沒有對應的概念,這種方式在有的場合能起到支援低耦合、高內聚、重用的效果

應用純虛構原則:

可重用多數情況下按功能類定義新的類,是一種「功能為中心的」物件

如果功能的相關性比較高的話,滿足高內聚

把職責分配到**可以避免兩個或者多個物件之間的直接耦合?如何解耦物件以保持較高的可重用性?

把職責分配給乙個中介物件,隔離物件與其他構建或者服務,使它們不產生直接耦合

如何設計物件、系統和子系統,使得這些成分裡面的變化因素、不穩定因素不會對系統的其餘部分造成意想不到的影響?

標識出能夠預計的變化點或者不穩定點,職責分配的時候建立乙個穩定的介面,把它們與系統的其餘部分隔離開來

「隔離可能的變化」是乙個設計原則,它鼓勵使用乙個穩定的介面來封裝可以預知的變更點

資料封裝、多台、資料-驅動設計、服務查詢、配置檔案、介面都用到了pv

兩種可能的變化點

變化點:在當前系統或者當前需求中已經存在了

演化點:推測的型別變化可能發生在今後,但在當前的需求中不存在

軟體系統在其生命週期都在發生變化,無論是好的設計還是壞的設計,都面臨著這個問題,但好的設計是穩定的

軟體系統應當允許功能擴充套件(開放性),可以擴充套件行為已滿足新的需求

不允許修改原有的**(關閉性)

應當嘗試設計永遠不需要修改的模組

系統行為的擴充套件只需要增加新的**,不能修改已有的**

模組不允許修改已有的**,而這種修改會影響客戶端

繼承的***:

打破了封裝性

繼承的**是靜態/編譯時繫結的

客戶需要購買整個軟體包

父類定義了許多硬性的規定

組合的特點:

沒有打破封裝性

物件組合是一種多型/執行時繫結

整體與部分之間只有介面邊界關聯,耦合較低

各部分職責明確

高層模組不應當依賴低層模組,兩者都依賴抽象

抽象不能依賴細節,細節應當依賴抽象

1.面向介面設計,而不是面向實現設計

面向介面設計的原因:

抽象類/介面修改的概率偏低

抽象概念容納的範圍廣,易於擴充套件/修改

不應當修改抽象的類/介面,符合ocp原則

例外:有些類非常成熟、穩定

2.避免傳遞性依賴

使用繼承機制,消除傳遞性依賴

3.每當有疑慮時,增加乙個間接層

如果設計的類找不到乙個滿意的解決方案,嘗試把職責委派其他乙個或者多個類

如果b呼叫c違法了某些原則,考慮讓a承擔一下職責,讓a來呼叫c

特點:

描述了乙個反覆出現的問題

描述了核心的解決方案

其他人可以無數次使用這個方案解決類似的問題

設計模式 物件導向設計原則

軟體的可維護性和可複製性是兩個非常重要的軟體質量屬性 物件導向物件設計原則是設計模式學習的基礎。每乙個設計模式都符合乙個或者多個物件導向設計原則 單一職責原則是最簡單的物件導向設計原則,它用於控制類的粒度大小 單一設計原則 乙個物件應該只包含單一的職責,並且該職責被完整的封裝在乙個類裡 這也意味著 ...

設計模式 物件導向設計原則

物件導向設計原則為支援可維護性復用而誕生,這些原則蘊含在很多設計模式中,它們是從許多設計方案中總結出的指導性原則。最常見的7種物件導向設計原則如下表所示 使用頻率 單一職責原則 single responsibility principle,srp 乙個類只負責乙個功能領域中的相應職責 開閉原則 o...

設計模式 物件導向設計原則

世界是具體的,認知是抽象的。像自然界中的生物 植物 動物乙個個名詞,就是對一系列具體個體抽象出來的稱謂,而魚 老虎 樹等就是乙個個實在的具體。哦,也許你會說,樹也是對一系列具體個體的抽象出來的稱謂,對也不對,對是因為樹確實是一系列具體個體的抽象稱謂,不對是因為照這個邏輯下去,就會陷入死迴圈,直到小到...