前記:本周進(jìn)入設(shè)計模式課程×秃猓現(xiàn)實(shí)中很多復(fù)雜的設(shè)計可以通過分解來細(xì)分成較小的問題霜定,不斷細(xì)分,細(xì)分成很多問題并抽象后廊鸥,會發(fā)現(xiàn)他們的解決思路是一致的望浩。前人總結(jié)出了基本問題的經(jīng)典解決方法,就是設(shè)計模式惰说。
復(fù)用
設(shè)計模式的核心思想就是復(fù)用磨德。設(shè)計的需求是不斷變化的,提高復(fù)用的設(shè)計方法吆视,考慮各種可能的拓展性典挑,在面對變化時才能應(yīng)對自如,同時結(jié)構(gòu)思路更清晰啦吧。
在程序設(shè)計中首先必須弄清楚“變化”和“穩(wěn)定”您觉。穩(wěn)定的部分是設(shè)計中的核心功能,變化是未來可能改變或拓展的部分授滓。將“穩(wěn)定”和“變化”隔離開來琳水,這樣明確各部分職責(zé),面對未來的變化般堆,提高了軟件架構(gòu)的穩(wěn)定性在孝。
面對對象設(shè)計中的底層實(shí)現(xiàn)為封裝和接口的思想就是穩(wěn)定和變化的隔離思想。
八大原則
面對對象設(shè)計的八大原則是:
1淮摔,依賴倒置原則(DIP)
高層模塊不應(yīng)該依賴低層模塊私沮,二者都應(yīng)該依賴其抽象;抽象不應(yīng)該依賴細(xì)節(jié)噩咪;細(xì)節(jié)應(yīng)該依賴抽象顾彰。
2,開閉原則(OCP)
對拓展開放胃碾,對更改封閉。
在軟件的生命周期內(nèi)筋搏,因?yàn)樽兓桶佟⑸壓途S護(hù)等原因需要對軟件原有代碼進(jìn)行修改時,可能會給舊代碼中引入錯誤奔脐,也可能會使我們不得不對整個功能進(jìn)行重構(gòu)俄周,并且需要原有代碼經(jīng)過重新測試。
因此髓迎,當(dāng)軟件需要變化時峦朗,盡量通過擴(kuò)展軟件實(shí)體的行為來實(shí)現(xiàn)變化,而不是通過修改已有的代碼來實(shí)現(xiàn)變化排龄。
3波势,單一職責(zé)原則(SRP)
類的職責(zé)要單一,不能將太多的職責(zé)放在一個類中。(高內(nèi)聚尺铣、低耦合)
功能單一便于使用和維護(hù)拴曲,并且不會發(fā)生太多干擾。
4凛忿,Liskor替換原則(LSP)
子類必須能替換他的基類澈灼。
5,接口隔離原則(ISP)
客戶端不應(yīng)該依賴它不需要的接口店溢;一個類對另一個類的依賴應(yīng)該建立在最小的接口上叁熔。
6,優(yōu)先使用對象組合床牧,而不是類繼承
繼承為白箱復(fù)用荣回,某種程度上為打破了封裝性,耦合度高叠赦。
利用對象組合則擁有良好定義的接口驹马,耦合度低。
7除秀,封裝變化點(diǎn)
使用封裝來創(chuàng)建對象間的分界層糯累。讓設(shè)計可以在分界層一側(cè)進(jìn)行修改,而不影響另一側(cè)册踩。實(shí)現(xiàn)層次間的松耦合泳姐。
8,針對接口編程暂吉,而不是針對實(shí)現(xiàn)編程
不將變量類型設(shè)置為具體的類胖秒,而是聲明為接口。這樣客戶無需知道對象的具體類型慕的,而只需知道對象具有的接口阎肝,減少各部分的依賴關(guān)系,實(shí)現(xiàn)“高內(nèi)聚肮街,低耦合”的設(shè)計思想风题。
重構(gòu)
成熟的設(shè)計模式不是石頭縫里鉆出來的,是一步一步改進(jìn)完善的結(jié)果嫉父。在研究設(shè)計模式時沛硅,重構(gòu)思想是十分重要的,通過不斷的研究程序绕辖,發(fā)現(xiàn)問題點(diǎn)摇肌,重構(gòu)優(yōu)化問題,在思考過程中會發(fā)現(xiàn)各種設(shè)計模式的優(yōu)缺點(diǎn)及其應(yīng)用位置仪际。
重構(gòu)技法的思想围小,有以下一個設(shè)計改善原則:
1昵骤,靜態(tài)->動態(tài)
2,早綁定->晚綁定
3吩抓,繼承->組合
4涉茧,編譯時依賴->運(yùn)行時依賴
5,緊耦合->松耦合