用多態(tài)代替條件語(yǔ)句(尤其是重復(fù)的case語(yǔ)句) 結(jié)構(gòu)化程序里很多的case語(yǔ)句中的邏輯都可以被放到繼承關(guān)系中寺枉,通過(guò)多態(tài)函數(shù)調(diào)用實(shí)現(xiàn)涡上。
《代碼大全2》是個(gè)大部頭实檀,全書900多頁(yè),讓人望而生畏邑遏。但是還是有好多東西,作者只是點(diǎn)到為止取具,細(xì)節(jié)的東西還要自己去深究价认。在《重構(gòu)》這一章中,提到了用多態(tài)代替條件語(yǔ)句(尤其是重復(fù)的case語(yǔ)句)顾患。作者對(duì)此只是簡(jiǎn)單地說(shuō)明了一下番捂,而沒有更多的說(shuō)明。當(dāng)然作者還是很負(fù)責(zé)任的江解,他告訴了讀者可以在《重構(gòu):改善既有代碼的設(shè)計(jì)》中詳細(xì)了解设预。
可能自己沒有很多的項(xiàng)目積累,對(duì)上面這段話不太理解(找個(gè)不懂的理由~_~)犁河。而且鳖枕,手上這個(gè)大部頭已經(jīng)讓自己很頭疼了魄梯,再去找一本書來(lái)看,估計(jì)自己非得瘋掉不可宾符。剩下的辦法就是參考一些別人的理解咯酿秸。
網(wǎng)上找一找,這篇還不錯(cuò) 簡(jiǎn)潔代碼之道(1):用多態(tài)替代條件語(yǔ)句 - 推酷
別人的終究是別人的魏烫,要吸收成自己的辣苏,才算是真正的收獲。
基本的意思是哄褒,如果你的代碼中出現(xiàn)了多次重復(fù)的
第1處
if(state == A){
// do A1
}
else if(state ==B){
// do B1
}
else if(state ==C)
{
// do C1
}
第2出
if(state == A){
// do A2
}
else if(state ==B){
// do B2
}
else if(state ==C)
{
// do C2
}
......
第 n處
if(state ==A){
// do An
}
else if(state ==B){
// do Bn
}
else if(state ==C)
{
// do Cn
}?
或等價(jià)的case語(yǔ)句稀蟋。其中,每個(gè)地方的do somthing是不一樣的呐赡,這個(gè)時(shí)候可以考慮用在繼承關(guān)系中用多態(tài)來(lái)實(shí)現(xiàn)退客。如下圖(原諒我懶得用軟件畫圖了,而且方向還不對(duì)):
那么罚舱,上面的代碼修改為
第一處
F f = Factory.createF(state)//更具state創(chuàng)建具體的子類實(shí)例
f.func1();