一、前言
這篇文章將會簡單介紹物件導向的設計模式,以及學習這項技術需要有哪些先備知識,學習才會比較順利。
二、設計模式
在物件導向中,除了最基本的五大原則以外,其實還有一知名的概念,那就是設計模式(Design Pattern),它能運用到很多層面。
1. 解決一再出現的問題
許多程式設計的問題都是類似的問題,例如場景切換與武器切換,這兩個雖然在做不同的事情,但都可以同時使用一個叫做狀態模式的設計模式,因為它們的解題思路是相同的概念。
當程式設計的問題一再出現以後,這皆問題就會有一種慣用的解法或通用的道理,而我們也可以反推回去,學習一些常常使用的解法再進行修改,讓它可以解決多種不同的問題。
2. 解決問題的方案及核心關鍵
設計模式並不是解決某個特定的問題,而是某些通用的概念,也因此這會是一個相當抽象的知識,因此學習的時候搭配某些固定的問題,或是某些範例,對於學習設計模式會是有幫助的做法。
在設計模式中,這些拿來做為範例與教學的模式,都是精簡到不能再精簡的內容,依據不同的問題要增加不同的程式來進行搭配,它們是用於解決問題的核心架構。
3. 可以重複使用的解決方案
這些設計模式能套用到不同專案上面,除非運用設計模式後,又添加了許多寫死的程式,否則大多數的程式腳本在細心維護的情況下,是可以移動到其他專案使用。
其實不管有沒有學習物件導向的設計思路,在撰寫程式的過程中,或多或少都會使用到一些設計模式,因為事先有問題才出現解決通則,而當你解決問題的時候,也自然會接近大家常用的解題方法。
三、學習前提
這篇文章除了介紹設計模式以外,還會講述一些學習這份知識的前提,像我目前只是勉強達成能閱讀的門檻,但熟悉設計模式的過程中依然會有很多新的問題產生。
1. 撰寫過完整的程式
首先,當然是已經有寫過程式的經驗,這個經驗多寡會決定學習設計模式的速度,對大多數的大學生而言,例如遊戲設計,只要有經手兩到三個遊戲專案程式,那就可以試著去了解設計模式。
2. 熟悉UML類圖
在大多數的設計模式教學中,無論是書本還是網路上的資源,都會搭配UML圖來進行介紹,這是因為UML圖是用來講述程式架構的一種可視化程式設計的製圖技術,非常適合用來講述設計模式。
這也是一個大型專案常使用到的技術,甚至會獨立出一個專門職業來繪製UML圖的設計,給予其他程式員空間,花費更多時間開發產品與專研程式技術。
3. 熟悉介面、抽象類別、虛擬
這是一個隱性的必要內容,因為設計模式牽涉到解決問題的解法,屬於較為高階的程式設計內容,學習設計模式可能需要了解介面(interface)、抽象類別(abstract)、虛擬(Vitrual)這幾個抽象的概念。
這些抽象概念在學習設計模式的過程中會頻繁看到,並且作為眾多設計模式運作的基礎,有不少設計模式的核心概念其實就是這幾個抽象概念的應用,並且針對特定的問題而已。
四、後記
這篇文章只是作為一個介紹,我不太確定自己是否能學習好設計模式,而且目前沒有太必要的需求,更多的是模仿網路上的學習資源即可,因此未來不一定會撰寫太多設計模式的東西。