面向对象设计原则之一:单一职责原则
單一職責原則(Single Responsibility Principle SRP)
??There should never be more than one reason for a class to change.
??什么意思呢?
? 所謂單一職責原則就是一個類只負責一個職責,只有一個引起變化的原因。
????? 如果一個類承擔的職責過多,就等于把這些職責耦合在一起,一個職責的變化會削弱或抑制這個類完成其他職責的能力,這個耦合會脆弱的設(shè)計。
軟件設(shè)計真正要做的許多內(nèi)容,就是發(fā)現(xiàn)職責并把這些職責相互分離;如果能夠想到多于一個動機去改變一個類,那么這個類就具有多于一個職責,就應該考慮類的分離。
以調(diào)制解調(diào)器為例如下圖:
??????
????? 從上述類圖里面我們發(fā)現(xiàn)有四個方法Dial(撥通電話),Hangup(掛電話),Receive(收到信息),Send(發(fā)送信息),經(jīng)過分析不難判斷出,實際上Dial(撥通電話)和Hangup(掛電話)是屬于連接的范疇,而Receive(收到信息)和Send(發(fā)送信息)是屬于數(shù)據(jù)傳送的范疇。這里類包括兩個職責,顯然違反了SRP。
????? 這樣做有潛在的隱患,如果要改變連接的方式,勢必要修改Modem,而修改Modem類的結(jié)果導致凡事依賴Modem類可能都需要修改,這樣就需要重新編譯和部署,不管數(shù)據(jù)傳輸這部分是否需要修改。
?????? 因此要重構(gòu)Modem類,從中抽象出兩個接口,一個專門負責連接,另一個專門負責數(shù)據(jù)傳送。依賴Modem類的元素要做相應的細化,根據(jù)職責的不同分別依賴不同的接口。如下圖:
???????????????????????
?
?????? 這樣以來,無論單獨修改連接部分還是單獨修改數(shù)據(jù)傳送部分,都彼此互不影響。
?
總結(jié)單一職責優(yōu)點:
???? 降低類的復雜性,
???? 提高可維護性
???? 提高可讀性。
?????降低需求變化帶來的風險。需求變化是不可避免的,如果單一職責做的好,一個接口修改只對相應的實現(xiàn)類有影響,對其它的接口無影響,這對系統(tǒng)的擴展性和維護性都有很大的幫助。
轉(zhuǎn)載于:https://www.cnblogs.com/mamxfx/p/7148055.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的面向对象设计原则之一:单一职责原则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: yii2.0 elasticsearc
- 下一篇: Docker logs 命令