前記:本周進入設計模式課程。現實中很多復雜的設計可以通過分解來細分成較小的問題,不斷細分,細分成很多問題并抽象后,會發現他們的解決思路是一致的。前人總結出了基本問題的經典解決方法,就是設計模式。
復用
設計模式的核心思想就是復用。設計的需求是不斷變化的,提高復用的設計方法,考慮各種可能的拓展性,在面對變化時才能應對自如,同時結構思路更清晰。
在程序設計中首先必須弄清楚“變化”和“穩定”。穩定的部分是設計中的核心功能,變化是未來可能改變或拓展的部分。將“穩定”和“變化”隔離開來,這樣明確各部分職責,面對未來的變化,提高了軟件架構的穩定性。
面對對象設計中的底層實現為封裝和接口的思想就是穩定和變化的隔離思想。
八大原則
面對對象設計的八大原則是:
1,依賴倒置原則(DIP)
高層模塊不應該依賴低層模塊,二者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象。
2,開閉原則(OCP)
對拓展開放,對更改封閉。
在軟件的生命周期內,因為變化、升級和維護等原因需要對軟件原有代碼進行修改時,可能會給舊代碼中引入錯誤,也可能會使我們不得不對整個功能進行重構,并且需要原有代碼經過重新測試。
因此,當軟件需要變化時,盡量通過擴展軟件實體的行為來實現變化,而不是通過修改已有的代碼來實現變化。
3,單一職責原則(SRP)
類的職責要單一,不能將太多的職責放在一個類中。(高內聚、低耦合)
功能單一便于使用和維護,并且不會發生太多干擾。
4,Liskor替換原則(LSP)
子類必須能替換他的基類。
5,接口隔離原則(ISP)
客戶端不應該依賴它不需要的接口;一個類對另一個類的依賴應該建立在最小的接口上。
6,優先使用對象組合,而不是類繼承
繼承為白箱復用,某種程度上為打破了封裝性,耦合度高。
利用對象組合則擁有良好定義的接口,耦合度低。
7,封裝變化點
使用封裝來創建對象間的分界層。讓設計可以在分界層一側進行修改,而不影響另一側。實現層次間的松耦合。
8,針對接口編程,而不是針對實現編程
不將變量類型設置為具體的類,而是聲明為接口。這樣客戶無需知道對象的具體類型,而只需知道對象具有的接口,減少各部分的依賴關系,實現“高內聚,低耦合”的設計思想。
重構
成熟的設計模式不是石頭縫里鉆出來的,是一步一步改進完善的結果。在研究設計模式時,重構思想是十分重要的,通過不斷的研究程序,發現問題點,重構優化問題,在思考過程中會發現各種設計模式的優缺點及其應用位置。
重構技法的思想,有以下一個設計改善原則:
1,靜態->動態
2,早綁定->晚綁定
3,繼承->組合
4,編譯時依賴->運行時依賴
5,緊耦合->松耦合