設計模式:單一職責原則

2020-12-16 免費高清壁紙大全

1、單一職責原則的概念

Single Responsibility Principle,SRP:

一個類被改變的原因不能超過一個,也就是說,一個類只有一個職責,如果職責過多,代碼就會臃腫,可讀性更差,也更難以維護。其實上單一職責原則和接口隔離原則有一定的關係,接口隔離以後,職責就單一了,實現這個接口的類的職責自然也就單一了。但是接口隔離關注的是抽象層,單一職責關注的是兩者兼而有之,偏重於實現。

2、為什麼要遵守單一職責原則

1、提高類的可維護性和可讀寫性

一個類的職責少了,複雜度降低了,代碼就少了,可讀性也就好了,可維護性自然就高了。

2、提高系統的可維護性

系統是由類組成的,每個類的可維護性高,相對來講整個系統的可維護性就高。當然,前提是系統的架構沒有問題。

3、降低變更的風險

一個類的職責越多,變更的可能性就更大,變更帶來的風險也就越大,

3、如何遵守單一職責原則

合理的職責分解相同的職責放到一起,不同的職責分解到不同的接口和實現中去,這個是最容易也是最難運用的原則,關鍵還是要從業務出發,從需求出發,識別出同一種類型的職責。舉個例子:人的行為分析,包括了生理、生活和工作等行為的分析,生理行為包括吃、跑、睡等行為,生活行為包括穿衣等行為,工作行為包括上下班,開會等行為,如下圖所示:

圖1 人類行為分析示例

人類的行為分成了三個接口:生理行為接口、工作行為接口和生活行為接口,以及三個實現類。如果都用一個實現類來承擔這三個接口的職責,就會導致代碼臃腫,不易維護,如果以後再加上其他行為,例如學習行為接口,將會產生變更風險(這裡還用到了組合模式,以後會詳細說明)。

四、最佳實踐

在實際工作中,有一個經常會用到的設計模式,DAO模式,又叫數據訪問對象,裡面定義了資料庫中表的增、刪、改、查操作,按照單一職責原則,為什麼不把增、刪、改、查分別定義成四種接口?這是因為資料庫的表操作,基本上就是這四種類型,不可能變化,所以沒有必要分開定義,反而經常變化的是資料庫的表結構,表結構一變,這四種操作都要跟著變。所以通常我們會針對一張表實現一個DAO,一張表就代表一種類型的職責。

相關焦點

  • 我去,這篇講「設計模式七大原則中單一職責原則」的文章有點東西
    這不偷偷拿出手機登錄各大招聘網站進行了瀏覽,突然發現怎麼招聘還要求會設計模式那?為此趕緊拿出那早已沾滿灰塵的資料進行惡補。哎!在這之前還是扶我起來加班吧。以上內容純屬虛構(除了加班),如有雷同請看下文。今天讓我們一起學習一下設計模式七大原則之——單一職責原則。
  • SOLID設計原則解釋 - 單一責任原則
    SOLID是面向對象軟體開發中最流行的設計原則之一。它是以下五個設計原則的助記符縮寫:單一責任原則開放/封閉原則利斯科夫替代原則接口隔離原理依賴倒置>單一責任原則的好處在我們深入探討這個設計原則之前,讓我們先解決最重要的問題:為什麼要使用它?
  • 設計模式設計原則——備忘錄
    2、裡氏代換原則(Liskov Substitution Principle)裡氏代換原則是面向對象設計的基本原則之一。裡氏代換原則:任何父類可以出現的地方,子類一定可以出現。裡氏替換原則是繼承復用的基石,只有當子類可以替換掉父類,且軟體的功能不受到影響時,父類才能真正被復用,而子類也可以再父類的基礎上增加新的行為。裡氏代換原則是對開閉原則的補充。 實現開閉原則的關鍵步驟就是抽象化,而父類與子類的繼承關係就是抽象化的具體體現,所以裡氏代換原則是對實現抽象化的具體步驟的規範。
  • 軟體設計模式六大原則,你懂多少呢?
    軟體設計模式軟體設計模式,簡稱設計模式,它是一種反反覆覆被使用,多數人經過分類編目的,代碼設計經驗的總結。使用設計模式可以為了減少重複的代碼,讓代碼變得更加簡潔,讓人更加容易理解,保證代碼的可靠性,程序可重複性。設計模式的六大原則,你懂多少呢?1.六大原則-單一職責原則原則思想:一個方法只負責一件事情。
  • 萬字長文帶你捋清六種設計模式的設計原則(建議收藏)
    當然,本文並不是教你是如何使用設計模式。而是講解設計模式的設計原則。設計模式在被設計出來的時候,也是遵循一些規則的。設計模式六大原則,具體如下:單一職責原則(類和方法,接口)開閉原則 (擴展開放,修改關閉)裡氏替換原則(基類和子類之間的關係)依賴倒置原則(依賴抽象接口,而不是具體對象)接口隔離原則(接口按照功能細分)迪米特法則 (類與類之間的親疏關係
  • 設計模式六大原則(4):接口隔離原則
    如果將這個設計修改為符合接口隔離原則,就必須對接口I進行拆分。在這裡我們將原有的接口I拆分為三個接口,拆分後的設計如圖2所示::建立單一接口,不要建立龐大臃腫的接口,儘量細化接口,接口中的方法儘量少。本文例子中,將一個龐大的接口變更為3個專用的接口所採用的就是接口隔離原則。在程序設計中,依賴幾個專用的接口要比依賴一個綜合的接口更靈活。接口是設計時對外部設定的「契約」,通過分散定義多個接口,可以預防外來變更的擴散,提高系統的靈活性和可維護性。說到這裡,很多人會覺的接口隔離原則跟之前的單一職責原則很相似,其實不然。其一,單一職責原則原注重的是職責;而接口隔離原則注重對接口依賴的隔離。
  • 設計模式 接口隔離原則
    設計模式 接口隔離原則用類圖說明即,接口承擔的內容過多導致接口隔離原則發現問題了。接口被過度的封裝了,那麼就要進行拆分。即,要滿足單一原則。接口要高內聚 即 接口中少公布public方法,即,接口要承擔的職責要最小,最核心舉例,要定製圖書管理系統
  • 爬梯:七大設計原則
    設計原則設計模式原則,其實就是程式設計師在編程時,應當遵守的原則,也是各種設計模式的基礎(即:設計模式設計的依據)1、單一職責原則基本介紹對類來說,即一個類應該只負責一項職責。通常情況下,我們應擔遵守單一職責原則;什麼情況可以不遵守單一職責原則:1)業務邏輯足夠簡單,代碼量足夠少;2)類中的方法數量足夠少,可以在方法級遵守單一職責原則。
  • .NET 設計模式的六大原則理論知識
    單一職責原則(SRP)(Single Responsibility Principle)2. 裡氏替換原則(LSP)(Liskov Substitution Principle)3.開閉原則(OCP)(Open Closed Principle)1:單一職責原則(一個類只做一件事)應用場景:類T負責兩個不同的職責:P1職責,P2職責。
  • 程序設計開發的六大原則 核心思想
    【IT168 評論】   一、單一職責原則  Single Responsibility Principle,應該有且僅有一個原因引起類的變更,實際中比較不好把握,因為職責的劃分沒有一個統一的標準。
  • 軟體設計的幾大原則匯總
    軟體設計的幾大原則匯總單一職責原則單一職責原則:英文為Single Responsibility Principle(SRP),這個原則要求我們在設計類或者接口的時候尤其在設計接口的時候把職責分清楚,通常一個職責不是單一的方法,是一類方法的組合。在開發的時候很難做到單一,我們在接口設計時一定做單單一,在類的設計時儘量做到單一原因引起變化。
  • 再談面向對象的設計原則
    如果開發者的設計能力不足,整個軟體系統面臨的風險就非常的大。那麼在設計過程中,我們如何才能更深入的理解面向對象呢?我們先來了解一下面向對象的六大基本原則,它們是面向對象設計的嚮導。這六個原則是:單一職責原則,開放封閉原則,替換原則,依賴原則,接口分離原則,合成聚合復用原則。
  • 設計的五大原則-SOLID
    在這本書裡面的第三章介紹了設計原則,這部分我覺得對於大家的平時工作都比較有用。2. 設計原則想必大家在學習面向對象的時候,都學習過下面幾大原則:SRP 單一職責:該設計原則是基於康威定律的推論,每個軟體模塊有且只有一個被更改的理由。OCP 開閉原則:對擴展開放,對修改關閉。LSP 裡氏替換原則:任何基類可以出現的地方,子類一定可以出現。
  • Java程式設計師應該了解的10個面向對象設計原則
    面向對象設計原則是OOPS(Object-Oriented Programming System,面向對象的程序設計系統)編程的核心,但大多數Java程式設計師追逐像Singleton、Decorator、Observer這樣的設計模式,而不重視面向對象的分析和設計。
  • JavaScript 設計模式學習總結與感悟(開發&面試必備)
    二、JavaScript常用設計原則我想提一個這本書的缺點,就是目錄,設計模式都是要遵循設計原則的,而且很多設計模式章節都提到了設計原則,然而書的目錄是最後一個大章節才說的設計原則,我覺得設計原則應該放在設計模式之前
  • 七大設計原則:接口隔離原則,你是怎麼應用的呢?
    ——陸遊※引導語在設計開發過程中往往會出現這麼一現象:在開始設計、開發的時候,一個接口的用來做什麼什麼的設計的很明確,前期開發過程中接口看著也比較惹人喜愛;隨著,開發周期的拉長,尤其是經過幾人手後,你會發現,它再也不是那個接口了,而是變得臃腫,都不想看了。
  • PHPer必學的進階教程:PHP面向對象設計的五個基準原則
    五大設計原則——SOLID學習面向對象編程像「抽象」、「封裝」、「多態」、「繼承」 等基礎知識是重要的,但同時為了創建簡潔、模塊化的設計,了解這些設計原則也同等重要。接下來,本文就為大家介紹面向對象設計的5個基本原則:S – 單一功能原則(SRP)O – 開閉原則(OCP)L – 裡氏替換原則(LSP)I – 接口隔離原則(DIP)
  • 常用的設計模式之橋接模式(Java代碼實現)
    有點類似於全球貿易分工明確的思想,這就是橋接模式,把兩個不同維度的東西橋接起來。一、認識橋接模式1、概念將抽象部分與它實現部分分離,使它們都可以獨立地變化。2、例子說明從上面的例子我們可以看到,我們的手機可以從兩個維度進行變化,一個是品牌,一個是內存。此時我們就可以通過橋接模式將這兩個維度分離開來,每一個維度都可以獨立擴展。
  • 六大設計原則超詳細介紹(再不理解你打我)
    軟體設計最大的難題就是應對需求的變化,但是紛繁複雜的需求變化又是不可預料的,我們要為不可預料的變化做好準備,這本身是一件非常痛苦的事情,但好在有大師們已經給我們提出了非常好的六大設計原則和23種設計模式來「封裝」未來的變化。本文只針對六大設計原則進行介紹,設計模式放在後面的文章進行詳解。
  • 學會面向對象要知道的五大原則
    面向對象設計原則是OOPS編程的核心,但大多數Java程式設計師熱心於像Singleton (單例) 、 Decorator(裝飾器)、Observer(觀察者) 等設計模式,而沒有把足夠多的注意力放在學習面向對象的分析和設計上面。