天天看點

設計模式的了解

先重提一下課本上關于設計模式的定義:設計模式是一套被反複使用、多數人知曉的、經過分類編排的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人了解、提高代碼的可靠性。設計模式的出現讓我們可以站在前人的肩膀上,通過一些成熟的設計方案來指導項目的開發與設計,更加友善得複用成功的設計和體系結構。

初看這個概念,确實有點抽象。下面談談我學完設計模式後對設計模式的了解。

沒學設計模式之前,不明白設計模式是什麼東西,接觸設計模式之後,雖然知道了設計模式是什麼,但是不明白這個東西将來在開發實踐中有什麼實際用處,是以剛開始學習設計模式的時候一直處于一種懵懵懂懂的狀态。直到看到某位大佬的一句金句——設計模式是為了抵禦需求變更帶來的影響,或者說把影響降到最低。這句話對我來說真的是醍醐灌頂,讓我瞬間明白了設計模式的實際作用。設計模式的運用提高了程式的可維護性和可擴充性,當産品經理提需求時把自己的代碼改動降到最低。把握這個初衷後再來了解各種設計模式就會更加通透,也更能體會到到設計模式的重要性和價值,也會意識到這樣寶貴的知識絕對不能落下,不學就是損失。明白了學習設計模式的意義,才有了學習的目标性。有目的的學習,才能提高學習效率,才能最大化吸收知識的精華。

簡單來說,就是大佬們總結了23個套路,面對不同的需求場景,考慮使用不同的套路,避免将來被開發經理或者自己坑,一個新的需求上來,發現需要對系統中的代碼做出較大改動,有時甚至需要把代碼重構。這就是沒有使用套路的下場,使用套路後,提前設計編排,考慮到以後的可維護性和可擴充性,這樣大部分新需求都不會對原有代碼做出較大改動。他好你也好,大家好才是真的好。果然是自古深情留不住,唯有套路得人心,程式設計的世界也不例外。

設計模式的了解

提前把結構設計好,降低需求變更帶來的影響。

23種設計模式分為三大類,建立型、結構型和行為型,這三大類設計模式涵蓋了程式設計的大部分運用場景。程式設計過程可以簡單分成三個大塊,建立對象、使用對象的功能、對象之間互相通信協作完成一個任務。設計模式的三個大類,就分别對應了程式設計的三個部分。

建立複雜對象時,應該考慮不要在程式中直接編寫建立對象的内部邏輯,建立型設計模式可以使得編碼者可以不需要關心建立對象的内部細節,能夠比較容易的應對類的增加,有效的提高程式的擴充性和可維護性,程式中不必書寫複雜的建立過程,進而提高了程式的可讀性,降低了程式員的開發難度,也就提高了開發效率。

當我們關注如何将現有類或者現有對象組織在一起形成形成更加強大的結構時,可以考慮使用結構型模式,比如使用擴充卡模式對不相容的接口進行适配,使得這個原本不可用的接口變得可用,典型的例子就是電腦的轉接頭,不同類型的電腦想要連接配接在一起就需要一個轉接頭。

當我們關注系統中對象之間的互相互動,想要提高對象之間通信與協作的效率時,像職責鍊模式這樣的行為型模式就可能非常有用了。比如職責鍊模式,請求的發起者不需要知道誰能處理這個請求,隻需把這個請求交一個固定的人或對象,如果這個對象不能處理他會自動向下傳遞,直到有人處理為止。否則請求發起者在發現目前處理者無法處理這個請求,又重新去找下個處理者,這樣效率是非常低的。使用職責鍊模式,就能實作請求發起者和請求處理者之間的解耦,請求發起者無需知道最終是誰處理了這個請求,隻關心這個請求是否被處理了以及處理的結果。

從工廠方法模式到單例模式,從裝飾設計模式到觀察者模式,每個設計模式都有自己的優缺點,每個模式都有自己的最佳适用場景,沒有包治百病的良方,也沒有沒有萬能的設計模式,揚長避短地在不同的場景選用不同的模式,才能最大化發揮設計模式的作用。

設計模式的一個典型應用就是現今網際網路中的各種web開發架構,比如Sping, Spring Boot, SpringMVC等等。用過這些架構的同學都應該有一種體會就是,非常人性化,簡單易用,節省時間,提高開發效率。一些看似複雜的操作隻需很少的代碼或者配置即可完成,比如:在配置檔案中簡單配置可以即可完成對象的建立,通過加事務注解即可将該段程式控制在一個事務中執行,甚至可以自定義各種注解,幾乎每個架構的可擴充性都非常高。

而這些開發架構之是以能這麼簡單易用,就是因為它們底層使用了大量的設計模式,比如通過組合模式解析xml配置檔案;通過觀察者模式完成依賴的自動更新;通過工廠方法模式提高建立對象的效率以及可維護性;通過動态代理模式完成各種切面程式設計,進而在面向對象程式設計的基礎上進一步提高程式的複用率;通過擴充卡模式對各種功能接口進行适配,使得我們完成一個功能可以有非常多的接口選擇,大大友善了我們的使用;還有通過裝飾設計模式給現有類動态增加功能,等等。正是通過各種設計模式的合理設計和運用,架構的易用性、開發效率以及程式的執行效率才逼近于一個近乎完美的程度。

繼續閱讀