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