2015年4月21日 星期二

設計模式(自我測試版本,撰寫中)

  試著以我的語言來解釋不同設計模式:

題目是由非關語言: 設計模式這裡去出

Chapter A: Creational 模式 
  根據我對Design pattern的理解,Creational主要是探討建立物件設計之間的一些方法,這些方法可以幫助我實做一個新的物件時,更精確達成我所想要達成的目標。
  1. Simple Factory 模式
      這個模式簡而言之,就是隱藏一個具體物件的細節設定。
    例如我如果在程式中建立了一個蘋果,那我應該將其內容如「顏色」、「口感」、「重量」...,都在建構子裡面處理掉,而不是讓第一次撰寫程式的人員花時間去了解這些設定的意思,及如何去設定他。
  2. Abstract Factory 模式
      這個模式蠻令我映象深刻的,因為我剛開始求職時,遇到一位面試官出了這題,請用一個for迴圈印出圓形、方形、三角形的圖案,那時的我還沒有經驗,學生時期也沒有碰過設計模式的相關概念,只好殘念下一間。
      簡而言之,這個模式就是使用不同物件繼承一個抽象類別,然後在使用這個抽象類別的時候可以讓各自的不同物件按照自己設定的情況去執行。
      例如:馬、貓、狗,都是動物,因此都繼承在動物的類別下,我們可以依據每個動物去實作他跑的細節,但最後程式執行時只要寫,動物跑即可。
  3. Factory Method 模式
      這個模式的概念是在設計的過程中,先將程式的大綱寫好,在實際實做的時候再補充細節,譬如我寫一篇文章先把起、承、轉、合的綱要擬好,然後再開始寫這幾個章節的內容。
      通常這個模式我都是在程式寫完後,才思考哪些功能是可以抽出來集合在一起的Factory,比較少在寫的過程中去思考可以先寫這個模式,然後在補充內容。
  4. Builder 模式
      我覺得連結中的比喻非常好了(暫時想不到比迷宮更能描述的說法),這個模式比較注重的是建立的子物件其內容比較完整,不像Abstract Factory還有留白的空間,這個比較適合已經確定子物件有哪些,然後透過排序或種種的使用方法去使用這些物件的時候。
  5. Prototype 模式
      這個建立物件的概念,其實就是實做繼承物件中不同的參數之間的窗口,例如我在專案中曾經遇過從韌體傳來的參數方式 跟資料庫所需要的資料格式不同,但資料是同一份,那我就必須在繼承的同時,告訴這個物件你的某某資料,他需要繼承的是父類別的某某資料,並且應該如何複製。
  6. Singleton 模式
      這個模式簡而言之就是設定一個程式中的全域變數,程式中的每個地方都能呼叫這個變數,而且不會有不一樣的數值﹔反之,每個地方都可能改變這個變數。
  7. Registry of Singleton 模式
      有時候我們希望這個全域變數是可以被註冊,被誰?在甚麼時候?因為甚麼事情?而註冊,然後在程式結束的時候可以取消這個註冊之類的情境即需要這個設計概念。