對于一個類,應(yīng)該僅有一個引起它變化的原因,,很簡單,,如果一個類承擔(dān)了多余一個的職責(zé),那么引起它變化的原因就會有多個,。也就等于把這些職責(zé)耦合在了一起,。當(dāng)然了一個職責(zé)的變化可能會削弱或者抑制這個類完成其他職責(zé)的能力。最終的結(jié)果就是這種耦合會導(dǎo)致一種脆弱的設(shè)計(jì),。例子:Retangle類有兩個方法,。一個方法把矩形繪制在窗體上,另一個方法計(jì)算矩形的面積: 什么是職責(zé),? Interface Modem
{ void dial(string pno); void hangUp(); void send(string c); void recv(); } 然而,,該接口中卻顯示出兩個職責(zé),第一個職責(zé)是連接管理[dial,;hangUp],;第二個職責(zé)是數(shù)據(jù)通信[send;recv ],,問題是這兩個職責(zé)應(yīng)該被分開嗎,?這得依賴于應(yīng)用程序變化的方式了,。如果程序的變化會影響連接函數(shù)的簽名,那么這個設(shè)計(jì)就具有僵化性的味道,。因?yàn)閟end,;recv類必須要重新編譯。部署的次數(shù)常常會超過我們希望的次數(shù),。在這樣的情況下,,需要把這兩個職責(zé)分離開。但是另一方面,,如果應(yīng)用程序的變化方式總是導(dǎo)致這兩個職責(zé)的同時變化,,那么就不必分離他們了。 |
|