有一定編碼經驗的人,不知不覺就能掌握一些常用的設計模式。 設計模式於我的感悟就是,編碼的套路,解決特定問題的最佳實踐。正如打LOL一樣,遇到不同的戰局,採取不能的策略。 新手剛瞭解設計模式中抽象的概念時容易一臉茫然(沒有遇到具體的應用場景確實也難以掌握),而老手往往駕輕就熟。 其實各行各業很多方面的 ...
有一定編碼經驗的人,不知不覺就能掌握一些常用的設計模式。
設計模式於我的感悟就是,編碼的套路,解決特定問題的最佳實踐。正如打LOL一樣,遇到不同的戰局,採取不能的策略。
新手剛瞭解設計模式中抽象的概念時容易一臉茫然(沒有遇到具體的應用場景確實也難以掌握),而老手往往駕輕就熟。
其實各行各業很多方面的思想是想通的,設計模式的思路不僅限於編程!我們不僅可以 Thinking in Java,也可以 LOL in Java !
【初識設計模式】模塊,將對一些常用的設計模式進行粗淺的記錄。舉例也採用LOL的思路,更容易接受這些抽象的概念。
用LOL的思路學習設計模式,so easy!
下邊是粘貼的設計模式的一些概念:
設計模式是什麼
設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。
使用設計模式是為了可重用代碼、讓代碼更容易地被他人理解、保證代碼可靠性。
毫無疑問,設計模式於己於人於系統都是多贏的,設計模式使代碼編製真正工程化,設計模式是軟體工程的基石脈絡,如同大廈的結構一樣。
總體來說,設計模式分為3大類總共23種:
1、創建型模式,共5種
工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式
2、結構型模式,共7種
適配器模式、裝飾器模式、外觀模式、橋接模式、組合模式、享元模式
3、行為型模式,共11種
策略模式、模板方法模式、觀察者模式、迭代器模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式
設計模式六大原則
1、開閉原則OCP
開閉原則說的是,對擴展開放、對修改關閉。在程式需要進行擴展的時候,不能去修改原有的代碼,這也是為了使程式的擴展性更好、易於升級和維護。
2、里氏代換原則LSP
在軟體中將一個基類對象替換成它的子類對象,程式將不會產生任何錯誤和異常,反過來則不成立。如果一個軟體實體使用的是一個子類對象的話,那麼它一定不能夠使用基類對象。里氏代換原則的程式表現就是:在程式中儘量使用基類類型來對對象進行定義,而在運行時再確定其子類類型,用子類對象來替換父類。
3、控制反轉原則IOC
針對介面編程,依賴於抽象而不依賴於具體
4、介面隔離原則ISP
使用多個隔離的介面,比使用單個介面要好
5、迪米特法則DP
一個實體應當儘量少地與其他實體間發生相互作用,使得系統功能模塊相對獨立
6、合成復用原則
儘量使用組合/聚合的方式,而不是使用繼承
設計中的三個關鍵字
1、抽象化
在眾多事物中提取出共同的、本質性的特征,捨棄非本質的特征,就是抽象化。抽象化的過程也是一個剪裁的過程,在抽象時,同於不同,取決於從什麼角度上來抽象。抽象的角度取決於分析問題的目的。
2、實現化
抽象類給出的具體實現,就是實現化。
一個類的實例就是這個類的實例化,一個具體子類是它的抽象超類的實例化。
3、解耦
這就比較重要了,平時我們老說好的代碼應該是"高內聚、低耦合",那麼什麼是耦合呢?
所謂耦合,就是兩個實體的行為的某種強關聯。而將它們之間的強關聯去掉,就是解耦。解耦是指將抽象化和實現化之間的耦合解開,或者說是將它們之間的強關聯改換成弱關聯。
所謂強關聯,指的是在編譯時期已經確定的,無法在運行時期動態改變的關聯;所謂弱關聯,就是可以動態地確定並且在運行時期動態改變的關聯。從這個定義看,繼承關係是強關聯,聚合關係是弱關聯。