面向?qū)ο蟮摹傲瓌t一法則”
開閉原則:軟件實(shí)體應(yīng)該對拓展開放滚停,對修改關(guān)閉。(在理想的狀態(tài)下粥惧,當(dāng)我們需要為一個(gè)軟件系統(tǒng)增加新功能時(shí)键畴,只需要從原來的系統(tǒng)派生出一些新類就可以,不需要修改原來的任何一行代碼突雪。要做到開閉有兩個(gè)要點(diǎn):①抽象是關(guān)鍵起惕,一個(gè)系統(tǒng)中如果沒有抽象類或接口系統(tǒng)就沒有擴(kuò)展點(diǎn);②封裝可變性咏删,將系統(tǒng)中的各種可變因素封裝到一個(gè)繼承結(jié)構(gòu)中惹想,如果多個(gè)可變因素混雜在一起,系統(tǒng)將變得復(fù)雜而混亂督函。
單一職責(zé)原則:一個(gè)類只做它該做的事嘀粱。(單一職責(zé)原則想表達(dá)的就是"高內(nèi)聚"激挪,寫代碼最終極的原則只有六個(gè)字"高內(nèi)聚、低耦合"锋叨,所謂的高內(nèi)聚就是一個(gè)代碼模塊只完成一項(xiàng)功能垄分,在面向?qū)ο笾校绻蛔屢粋€(gè)類完成它該做的事娃磺,而不涉及與它無關(guān)的領(lǐng)域就是踐行了高內(nèi)聚的原則薄湿,這個(gè)類就只有單一職責(zé)。)
依賴倒轉(zhuǎn)原則:面向接口編程偷卧。(該原則說得直白和具體一些就是聲明方法的參數(shù)類型豺瘤、方法的返回類型、變量的引用類型時(shí)涯冠,盡可能使用抽象類型而不用具體類型炉奴,因?yàn)槌橄箢愋涂梢员凰娜魏我粋€(gè)子類型所替代逼庞。)
里氏替換原則:任何時(shí)候都可以用子類型替換掉父類型蛇更。但簡單的說就是能用父類型的地方就一定能使用子類型。里氏替換原則可以檢查繼承關(guān)系是否合理赛糟,如果一個(gè)繼承關(guān)系違背了里氏替換原則派任,那么這個(gè)繼承關(guān)系一定是錯(cuò)誤的,需要對代碼進(jìn)行重構(gòu)璧南。
接口隔離原則:接口要小而專掌逛,不能而全。
合成聚合復(fù)用原則:優(yōu)先使用聚合或合成關(guān)系復(fù)用代碼司倚。要說明的是豆混,即使在Java的API中也有不少濫用繼承的例子,例如Properties類繼承了Hashtable類动知,Stack類繼承了Vector類皿伺,這些繼承明顯就是錯(cuò)誤的,更好的做法是在Properties類中放置一個(gè)Hashtable類型的成員并且將其鍵和值都設(shè)置為字符串來存儲數(shù)據(jù)盒粮,而Stack類的設(shè)計(jì)也應(yīng)該是在Stack類中放一個(gè)Vector對象來存儲數(shù)據(jù)鸵鸥。記住:任何時(shí)候都不要繼承工具類丹皱,工具是可以擁有并可以使用的妒穴,而不是拿來繼承的。
迪米特法則:迪米特法則又叫最少知識原則摊崭,一個(gè)對象應(yīng)當(dāng)對其他對象有盡可能少的了解讼油。