九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
<p>面向?qū)ο箢愒O(shè)計的五大原則(一)</p><p>單一職責(zé)原則Single Responsibility Principle </p>

  引言


  面向?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分解為兩個類,如下圖所示


  


  將計算面積部分從Rectangle類中分離出來,產(chǎn)生一個GeometricRectangle類,專門用來計算面積。這樣的話,對于畫矩形方法的修改就不會影響到計算幾何應(yīng)用了。也不用在部署多余的內(nèi)容。

  什么是職責(zé)?

  在上文中,我們將單一職責(zé)定義為“一個改變的原因”。如果你想出超過一個改變類的動機,就說明類具有多個職責(zé)。這很難以發(fā)現(xiàn)。我們習(xí)慣于按照組來思考職責(zé)。例如,考慮下面的Modem接口。

  

interface IModem
    {
        
public void Dial(string no);
        
public void Hangup();
        
public void Send(char c);
        
public char Reveive();
    }

 

  我們中的大多數(shù)人認為上面的接口已經(jīng)設(shè)計的不錯了,四個功能也都是modem的功能。

  但是,這里其實是兩個職責(zé)。一個職責(zé)是連接管理,另外一個是數(shù)據(jù)通信。Dial和Hangup方法管理moden的鏈接,Send和Receive管理modem的數(shù)據(jù)通信。

  這兩個職責(zé)是否應(yīng)該分開呢?毫無疑問是應(yīng)該的。這兩個職責(zé)是沒有關(guān)系的。他們改變的原因不盡相同。而且,他們會被應(yīng)用的不同部分調(diào)用,這兩個部分也會因為不同的原因變化。



  上圖的做法可能更好,將接口分為兩個。然后有一個類來實現(xiàn)這兩個接口,代表一個modem。

  結(jié)論

  SRP原則是最簡單的原則之一,也是最難做好的原則之一。我們會很自然的將職責(zé)連接在一起。找到并且分離這些職責(zé)是軟件設(shè)計需要達到的目的。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
SRP:單一職責(zé)的原則
設(shè)計六大原則總結(jié)
敏捷開發(fā)之原則 五大原則 SRP OCP LSP DIP ISP
面向?qū)ο笤O(shè)計的原則——單一職責(zé)原則
六大設(shè)計原則
設(shè)計模式-七大軟件設(shè)計原則
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服