心得分享 2 設計模式 單一職責原則

2021-10-18 10:06:16 字數 2481 閱讀 9299

單一職責原則(全稱:single responsibility princile,簡稱srp),它表示乙個類只具有某種職能,比如人又生理需求(吃、喝、睡)、生活需求(工作、鍛鍊),生理需求和生活需求分別當做兩個類,他們裡邊任意方法的改變都不會影響另乙個類的正常執行,如果乙個類裡邊具有多種職能,那麼意味著一種職能的變化可能會影響另一種職能,那麼這個時候就應當將它們才分成兩個負責不同職能的類。

又比如,我們常用的dao模式,就是採用的單例模式,比如userdao它負責了使用者相關的資料庫相關操作,這裡把一張表作為一種職能。

package com.muzili.principle.singlereposibility;

/** * @author: muzili(李敷斌)

* @date: 2021-01-30

* @version: v0.0.1

* @description: 單一職責模式 案例1

* @analyze: 1.該案例違反了單一職責的設計原則,它的職責分工不明確 乙個方法就描述了交通工具的所有執行的職能 很明顯

* 還可以進行細分 比如可以分為 公路上執行的 天空中執行的 水中執行的

* 優化方案:將特定的執行方式細分到每個類

*/public

class

singleresposibility1

}// 交通工具類

class

vehicle

}

**分析:

以上**違反了,單一職責的設計原則,可以很明顯的看出交通工具遠遠不止於只能夠在公路上執行,交通工具還可分為在天上飛的、水中游的。

優化方案:

將各種執行方式的交通工具分別實現

package com.muzili.principle.singlereposibility;

/** * @author: muzili(李敷斌)

* @date: 2021-01-30

* @version:

* @description: 單一職責原則 案例2

* @analyze: 1. 案例2符合單一職責的設計原則 2.但是這麼做成本過高,並且需要修改客戶端實現

* 別的單一職責,而實現方法級別的單一職責 這樣做的好處在於防止簡單的邏輯 設計的

* 太過於複雜

*/public

class

singleresposibility2

}//公路交通工具類

class

roadvehicle

}//空中交通工具類

class

airvehicle

}//水中交通工具類

class

wathervehicle

}

**分析:

以上案例符合單一職能的設計原則。

但是因為業務比較單一且簡單,這樣才分的成本比較高,並且需要修改客戶端的實現。

優化方案:

在方法比較少的時候,可以適當的違反單一職責的設計原則。

package com.muzili.principle.singlereposibility;

/** * @author: muzili(李敷斌)

* @date: 2021-01-30

* @version:

* @description: 單一職責原則 案例3

* @analyze: 1. 案例3在一定程度上違反了單一職責 但是僅僅是違反了類級別的單一職責 在方法層面還是準守了單一職責

*/public

class

singleresposibility3

}//交通工具類

class

vehicle2

public

void

airrun

(string vehicle)

public

void

watherrun

(string vehicle)

}

**分析:

以上**,違反了類級別的單一職責設計原則,但是遵守了方法級別的單一職責設計原則。

如果在方法比較少的情況下,可以適當的違反單一職責的設計原則,但是如果在乙個類中有方法是與相關具體實現類有關的話,那麼還是需要進行拆分,比如在交通工具類中,此時存在乙個只有轎車才具有的職能 敞篷功能 ,那麼這個時候方法級別的單一職責就不適用了,應當進行職責拆分。

降低類的複雜度,乙個類只負責某一項職責。

提高類的可讀性和可維護性。

降低因變更而引起的風險。

通常情況下,應當嚴格遵守單一職責的設計原則,只有在邏輯非常簡單的情況下,才能夠在**層面違反。即在乙個類中有非常少方法的時候,可以在方法層面保持單一職責的設計原則。

設計模式原則 單一職責原則

定義 乙個物件應該只包含單一的職責,並且該職責被完整地封裝在乙個類中。即 不要存在多於乙個導致類變更的原因。通俗的說,就是乙個類只負責一項職責。問題由來 類t負責兩個不同的職責 職責p1,職責p2。當由於職責p1需求發生改變而需要修改類t時,有可能會導致原本執行正常的職責p2功能發生故障。解決方案 ...

設計模式原則 單一職責原則

對類來說的,即乙個類應該只負責一項職責。假如類a負責多項職責,當其中一項職責需求發生變更時,可能對其他職責的執行造成影響。例如 類a負責實現 訂單資料持久化 職責 和 使用者資料持久化 職責,那麼當我們需要修改 使用者資料持久化 需求時,由於 糅雜在乙個類裡,可能會對 訂單資料持久化 的職責造成影響...

設計模式原則 單一職責原則

1.概念 對類來說的,即乙個類應該只負責一項職責。如類a負責兩個不同職責 職責1,職責2。當職責1需求變更而改變a時,可能造成職責2執行錯誤,所以需要將類a的粒度分解為a1,a2。2.問題的提出 package com.atguigu.principle.singleresponsibility p...