自從當上了工程師後,大多數時間都負責後端的程式開發,從最一開始設計api到現在sdk的經驗中,了解到一個好的程式架構及設計,不只可以讓後續維運成本降低,往後要擴充也會相對容易許多。
而對於程式架構,我認為沒有所為最好的架構,每個project都有適合自己的架構及設計,像遊戲的設計跟電商網站就不會一樣,所以選擇適合的工具是很重要的!
這系列文會從Design Principles、各種design pattern到最後的Anti-Patterns & Code Smells介紹下去,讓我們可以更了解各種pattern的使用時機與場合。
註:可以利用Online Java Compiler IDE來跑範例程式碼。
在程式設計中,經常遇到相同的設計問題,許多設計可以解決這些重複出現的問題,但隨著時間推進,某些設計因為更加的靈活,而優於了其他的設計。而這些設計被整理歸類,進而發展出了Design Pattern。Design Pattern即是針對這些反覆出現的問題而提出的解決方案。
Design Pattern一書中介紹了 23 種模式,依照不同的狀況,使用不同的模式,解決不同的問題。而所謂的Design Pattern並非一組source code,他為一個概念。我們可以舉一個例子 - 西洋棋。
西洋棋的棋子有很多種類,每種棋子都有屬於自己的能力,新手棋士可能知道每個棋子基本怎麼使用,但有經驗的棋士不但知道每個棋子的基本用法,更知道了棋子間如何互相配合使用,在特定狀況使用特定的戰術可以更容易贏得比賽。
初學者開發人員就好比新手棋士,他們知道for loop、if-else...等等方法,但透過經驗的累積,他們開始知道如何搭配各種方法來建構及設計程式,讓程式不但可以重複使用也更加的靈活。
這邊並不是說只能在特定狀況下贏,而是如同剛剛講到的,依照不同的狀況,使用不同的模式,解決不同的問題。
Design Pattern為一些專家,歷經無數的錯誤及試驗而得到的結果。
我們舉一個例子,小學我們都學過如何把1加到100。我們可以怎麼做??
方法一:土法煉鋼直接從頭加
1+2+3...+100
方法二:已知的數學公式
n(n+1)/2
很明顯,方法二已經有一個“公式”可以幫助我們快速的解決問題,不但簡化過程也節省了時間。
但只是節省過程與時間嗎??
我們把問題再做延伸,假設今天需要更改成相加1000個數字,那我們該怎麼辦??
方法一依舊要從1加到1000,但方法二只需要把n改成1000。
這樣的差距,就很像我們在程式開發過程中,突然有需要做變更或是新增需求,如果有使用合適的design pattern,便可輕鬆解決很複雜的問題。
所以使用Design Pattern目的,除了建立良好的軟體系統外,不管在未來維護程式或是新增需求,都可以大大節省我們的時間及精力。
Design Pattern並不直接用來完成程式碼的編寫,而是描述在各種不同情況下,要怎麼解決問題的一種"方案"
為了建立一個方便維護及擴充的軟體系統。
設計模式