引言
面向?qū)ο箢愒O(shè)計,或者說是面向?qū)ο笤O(shè)計,有五大原則:
簡介
今天我們要接觸的是SRP,單一職責(zé)原則。
我覺得這些原則的目的就是要實現(xiàn)類的高內(nèi)聚、低耦合。高內(nèi)聚high cohision和低耦合low couple在很多時候都是我們的目標,不管我們引入設(shè)計模式,進行架構(gòu)分析、設(shè)計、提高復(fù)用性,解耦decouple是我們共同的目標。
There should never be more than one reason for a class to change.
類的改變不應(yīng)該由一個以上的原因?qū)е?,也就是說不應(yīng)該有一個以上的原因可以導(dǎo)致類的改變。
如果類的職責(zé)超過一個,這些職責(zé)之間就會產(chǎn)生耦合。改變一個職責(zé),可能會影響和妨礙類為其他人服務(wù)的功能。這種類型的耦合將會導(dǎo)致脆弱的設(shè)計,在修改的時候可能會引入未逾期的問題。
如上圖所示,Rectangle類有兩個方法:一個是在屏幕上畫矩形,一個是計算矩形的面積。兩個不同的應(yīng)用會使用Rectangle類,一個應(yīng)用使用Rectangle來幫助計算面積,它從來不會在屏幕畫矩形。另外一個是圖形界面的應(yīng)用,也可能會計算面積,但是肯定會在屏幕畫矩形。
當(dāng)前的設(shè)計就違反了SRP原則,Rectangle類有兩個職責(zé),一個是為數(shù)學(xué)模型提供幾何的矩形,計算面積;另外一個職責(zé)是為圖形用戶界面提供矩形的顯示。
這個違反SRP原則的設(shè)計會導(dǎo)致很多嚴重的問題。首先,在計算幾何應(yīng)用中必須包含GUI。因為計算幾何應(yīng)用可能就是一個控制臺程序,不需要用戶界面,但是由于需要使用這個違反SRP原則的類,就必須要包含GUI的類庫,在編譯的時候要同時編譯,在部署的時候還增加了部署的內(nèi)容,而且這些內(nèi)容可能永遠都不會被用到。
其次,如果圖形應(yīng)用的變化,需要修改Rectangle類的話。我們的計算幾何應(yīng)用也必須要重新編譯和部署,因為它也引用了相同的Rectangle類,如果不那么做的話,可能會發(fā)生意外的錯誤(因為Rectangle類被修改了,不知道有沒有什么影響)。
好一點的做法是將Rectangle分解為兩個類,如下圖所示
我們中的大多數(shù)人認為上面的接口已經(jīng)設(shè)計的不錯了,四個功能也都是modem的功能。
聯(lián)系客服