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