面向對象原則之一 單一職責原則


前言

面向對象有人分為五大原則,分別為單一職責原則、開放封閉原則、依賴倒置原則、接口隔離原則、里氏替換原則。

也有人分為六大原則,分別為單一職責原則、開放封閉原則、依賴倒置原則、接口隔離原則、里氏替換原則、迪米特法則。

 

現在我們來介紹單一職責原則

 

單一職責原則

1)概念

按照官方說明,單一職責原則是指 應該有且只有一個一個原因引起類的變更。

通俗一點來說,一個類應該只做一類事情;一個類應該只負責一個功能。

單一職責原則是程序設計高內聚、低耦合的引申。

2)浮想聯偏

作者接觸單一職責原則的時候,以為很簡單。單一職責嘛,一個類一個方法,不就是它的終極目標嗎?

的確,這屬於‘終極目標’但是此終極目標不現實。因為,一個類一個方法的確是高內聚、低耦合。但是這顯然顯得代碼很臃腫了,維護更加不便,在中大型的項目更加如此。如果你的項目足夠簡單,類足夠少,也可以這么來做。

所以,這里要強調一點的是,單一職責原則是一個類處理一類事情,也只有一類事情影響到這個類。並不是一個類處理一個方法。

3)開始理解

我們來舉個例子。作者眼前有一支黑色筆,拿這支筆來做例子吧。

筆有它屬性、被動的行為。屬性有:黑色、手感好、筆尖0.5。行為有:寫字、畫畫、扎人。當然,這里的扎人只是個例子,千萬不要來真的了 >. <

按照一般的做法,我們都把筆的屬性與行為都放在一個類來做。單一職責現在就起作用了,我們要分開成屬性與行為。

來上UML圖:

首先按照一般的設計:

image

一般一個接口、一個類來處理筆的各種事情,上面的圖充分解析了這種說法,也是平常人設計的類。

下面,我們按照單一職責原則,來設計筆的屬性、行為來隔離開,如下:

image

從上圖看出,我們把行為以及屬性動作分離開。

舉了這個例子,我們看出一件事情,可以分離開多件事情的處理,從而提高了軟件設計的高內聚、低耦合。

但是,我們從上面的例子,可以在分一下筆的行為。因為畫畫、寫字是筆在紙上做的動作,而扎人是筆在人上做的動作。

更通俗地說,就是畫畫這個動作要發生改變的話,扎人這個動作應該不會受影響,所以扎人應該放到另外一個類中做處理。

下面我們可以更深一層地理解一下這個筆的動作可以分解成2個。

4)更深一層地理解

按照上面說的,我們可以把筆的動作分成兩種,一種在紙上做的,一種是在人上做的。

為什么可以分開這兩種,因為上面說了,一種在紙上做,一種在人上做。在紙上做只影響在紙張的類,在人上做只影響在人生的類。互不干擾。

我們上一下UML圖吧:

image

 

到此結束了,下面有空再修改與補充。

 

其他鏈接:

開放封閉原則(開閉原則)

單一職責原則

依賴倒置原則

接口隔離原則

里氏替換原則

迪米特法則

 

此文轉發,請注明出處,謝謝。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM