淺談設計模式

轉載請註明出處:https://blog.csdn.net/m0_37459380/article/details/83007144

設計模式簡介

設計模式(Design Pattern)代表了最佳實踐,通常被有經驗的軟件開發人員所採用。設計模式是軟件開發人員在開發過程中面臨的一般問題的解決方案。這些解決方案是衆多軟件開發人員經過相當長時間的實驗和總結出來的。

設計模式是一套被反覆使用的、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是爲了代碼重用、讓代碼更容易被他人理解、保證代碼可靠性。

設計模式的出現可以讓我們站在前人的肩膀上,通過一些成熟的設計方案來指導新項目的開發和設計,以便於我們開發出具有更好的靈活性和可擴展性,也更易於複用的軟件系統。設計模式有助於對框架結構的理解,成熟的框架通常使用了多種設計模式,如果你熟悉這些設計模式,毫無疑問,你將迅速掌握框架的結構,我們一般開發者如果突然接觸EJB、Spring等框架,會覺得特別難學、難掌握,那麼轉而先掌握設計模式,無疑是給了你剖析EJB或J2EE系統的一把利器。學習這些模式有助於經驗不足的開發人員通過一種簡單快捷的方式來學習軟件設計。

設計模式的六大原則

1.開閉原則(Open Close Principle)

開閉原則的意思是:對擴展開放,對修改關閉。在程序需要擴展的時候,儘量在不修改原有的代碼的情況下進行擴展,實現熱插拔的效果。這樣做是爲了使程序的擴展性好,易於維護和升級。

任何軟件都需要面臨一個很重要的問題,即它們的需求會隨時間的推移而發生變化。當軟件系統需要面對新的需求時,我們應該儘量保證系統的設計框架是穩定的。如果一個軟件設計符合開閉原則,那麼可以非常方便地對系統進行擴展,而且在擴展時無須修改現有代碼,使得軟件系統在擁有適應性和靈活性的同時具備較好的穩定性和延續性。隨着軟件規模越來越大,軟件壽命越來越長,軟件維護成本越來越高,設計滿足開閉原則的軟件系統也變得越來越重要。

2.里氏代換原則(Liskov Substitution Principle)

里氏代換原則是面向對象設計的基本原則之一。 里氏代換原則中說,任何基類(父類)可以出現的地方,子類一定可以出現。里氏代換原則是對開閉原則的補充。實現開閉原則的關鍵步驟就是抽象化,而基類與子類的繼承關係就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規範。

在軟件中將一個基類對象替換成它的子類對象,程序將不會產生任何錯誤和異常,反過來則不成立,如果一個軟件實體使用的是一個子類對象的話,那麼它不一定能夠使用基類對象。
例如:我喜歡動物,那我一定喜歡貓,因爲貓是動物的子類;但是我喜歡貓,不能據此斷定我喜歡動物,因爲我並不喜歡老鼠,雖然它也是動物。

3.依賴倒轉原則(Dependence Inversion Principle)

依賴倒轉原則:這個原則是開閉原則的基礎。抽象不應該依賴於細節,細節應當依賴於抽象。換言之,針對接口編程,依賴於抽象而不依賴於具體。依賴倒轉原則要求我們在程序代碼中傳遞參數時或在關聯關係中,儘量引用接口和抽象類進行變量類型聲明、參數類型聲明、方法返回類型聲明,以及數據類型的轉換等,而不要用具體類來做這些事情。

4.接口隔離原則(Interface Segregation Principle)

使用多個專門的接口,而不使用單一的總接口,即客戶端不應該依賴那些它不需要的接口。每一個接口應該承擔一種相對獨立的角色,不幹不該乾的事,該乾的事都要幹。

在使用接口隔離原則時,我們需要注意控制接口的粒度,接口不能太小,如果太小會導致系統中接口氾濫,不利於維護;接口也不能太大,太大的接口將違背接口隔離原則,靈活性較差,使用起來很不方便。

5.迪米特法則,又稱最少知道原則(Demeter Principle)

最少知道原則是指:一個實體應當儘量少地與其他實體之間發生相互作用,使得系統功能模塊相對獨立。不要和陌生人說話,只與你的直接朋友通信,即一個對象應對其他對象有儘可能少的瞭解。簡言之,就是通過引入一個合理的第三者來降低現有對象之間的耦合度。

6.合成複用原則(Composite Reuse Principle)

合成複用原則是指:儘量使用合成/聚合的方式,少用繼承。

例如:有幾個類要與數據庫打交道,就寫了一個數據庫操作的類,然後別的跟數據庫打交道的類都繼承這個。結果後來,修改了數據庫操作類的一個方法,各個類都需要改動。

設計模式分類

設計模式分爲三大類:

1.創建型模式

這些設計模式提供了一種在創建對象的同時隱藏創建邏輯的方式,而不是使用 new 運算符直接實例化對象。這使得程序在判斷針對某個給定實例需要創建哪些對象時更加靈活。

包括5個:

工廠模式(Factory Pattern)
抽象工廠模式(Abstract Factory Pattern)
單例模式(Singleton Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)

結構型模式

這些設計模式關注類和對象的組合。繼承的概念被用來組合接口和定義組合對象獲得新功能的方式。

包括7個:

適配器模式(Adapter Pattern)
橋接模式(Bridge Pattern)
組合模式(Composite Pattern)
裝飾器模式(Decorator Pattern)
外觀模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)

行爲型模式

這些設計模式特別關注對象之間的通信。

包括11個:

責任鏈模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解釋器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
備忘錄模式(Memento Pattern)
觀察者模式(Observer Pattern)
狀態模式(State Pattern)
策略模式(Strategy Pattern)
模板方法模式(Template Pattern)
訪問者模式(Visitor Pattern)

感謝您的閱讀,如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕。本文歡迎各位轉載,但是轉載文章之後必須在文章開頭給出原文鏈接。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章