Google Prettify

2015-03-24

Design Pattern 101

這是strategy pattern

引言

第一次寫design pattern 的文章。 這一系列的文章也是想寫很久了,今天總算是開宗第一篇…。

什麼是pattern

Pattern ,中譯名叫「樣式」,就是每次在這樣的情況下,大家都會那樣做的一種行為模式。

比方說,在電影情節裡,只要有公主,就一定會有魔王; 有魔王就一定會閒閒沒事跑去抓公主或到處去姦淫擄掠。如果公主被抓了,就一定會蹦出一個英雄,然後正義凜然的會跑去救他。這就是pattern。 又比方說,我最近在講給小朋友聽的一些故事裡,不管是白雪公主還是長髮公主,也不管這些女孩子們經歷了多少苦難,但最後一定會和王子過著幸福快樂的日子。(其實我不是很確定白雪公主跟長髮公主的老公,是不是相同一個王子;小朋友不懂問,我也不敢提 )。也不管是三隻小豬還是七隻小羊,甚至是小紅帽,基本上只要你是大野狼,最後一定得死。 這也是pattern。

其實我不是很確定這些公主們的老公,是不是相同一個王子

這些童話故事可能離我們稍微遠了一點。沒關係,我舉些生活周遭的例子。

比方說一些文章標題的命名方式:「有錢人不告訴你的十件事」、「券商不告訴你的九件事」、「股市高手不敢說的事」; 這是pattern。 我們日常使用的應用軟體,不管是wrod、Excel、Chrome Browser,最上一排是功能列,接下來可能會有一些工具列,接下來才會是主要的工作區域;這是使用者界面設計的pattern。 也有不少廣告,不論介紹什麼產品,只要經費足夠,就會去找一個公眾人物來代言,不管這個人物有沒有使用過這個產品;這也是pattern。

Pattern 總的來說,就是大家一直都在做的事。 雖然是大家都在做的事,可是通常沒講你不會留意到。 就如同許多標題殺手:「XXX都在做的事」一樣,不講覺得很神祕,可是講了,你也真的了解了,就會說:「這我早知道了」。 pattern就是這樣的東西。

什麼是design pattern?

這裡提到的 Design pattern 也是一種pattern,只是著重在於軟體系統方面。這是是許許多多的高手,在經歷過許許多多的考驗,整理出幾種常用的程式設計方式,尤其著重於如何配合與使用物件。

Design pattern的歷史

Design Pattern 一開始並不是出現在軟工界,而是起源於建築業。 有名的書是由Erich Gamma 等4人所著的Design Patterns: Elements of Reusable Object-Oriented Software,俗稱4人幫,簡稱GoF。 裡面一共有23種Pattern、分為3大類。 不過時事變遷,已經不再只有這樣了,而Design Pattern的應用也不再那麼單純。 有些pattern 可以小小的幾行程式碼或是3~5個類別就可以呈現出來,有些pattern 則是一個framework的精髓所在。Pattern 除了在OO、class 的設計上使用,也導到系統架構上。除了pattern,也有所謂的AntiPattern出現;白話的說法就是:「許多人會犯的錯」。 還記得前面所講的,pattern其實是「大家都在做的事」嗎? 這「事」也包含了「的事」。

Design pattern有那些

GoF所提出來的23種 design pattern列舉如下:

  • 創建型模式
    • Abstract Factory Pattern
    • Simple Factory Pattern
    • Builder Pattern
    • Prototype Pattern
    • Singleton Pattern
  • 結構型模式
    • Adapt Pattern
    • Bridge Pattern
    • Composite Pattern
    • Decorate Pattern
    • Facade Pattern
    • Flyweight Pattern
    • Proxy Pattern
  • 行為型模式
    • Chain of Reponsibility Pattern
    • Command Pattern
    • Interpreter Pattern
    • Iterator Pattern
    • Mediator Pattern
    • Memento Pattern
    • Observer Pattern
    • State Pattern
    • Strategy Pattern
    • Template method Pattern
    • Visitor Pattern

為什麼要學Design pattern?

網友解釋,Design pattern 像格鬥電玩裡的連續技,我覺得很貼切。 一開始學會了程式的宣告、語法以及hello world,就像會用搖杆移動角色,看起來沒什麼。當你會學會使用函式庫,就好像學會了一些招式,開始有點威力。 不過當你了解到可以將某些招式組合起來成為連續技,並在不同時機點上使用,就可以對對手造成不小的傷害,這就是design pattern。

基本上pattern可以說是高手們的心得與結晶、他們歸納出來的武功秘笈。高手們都這樣做,一般庸手可以不這樣做嗎? 好吧,這個理由對我來說是有牽強了點。我一向主張不盲目的依樣畫葫蘆

其實學會design patten 可以讓你可以快速的看懂別人的程式碼,自己撰寫出別人可以看得懂的程式碼; 不再維護系統後不怕被人追殺。 但是在剛學的時候需要注意,不要為了使用pattern而用pattern,這樣很容易走火入魔。 這就好像連續技用錯時機點,也往往很容易被對手KO。

需要先會什麼

UML。

大多數的design pattern教學都是使用UML來做為描述。 UML 不需要全部都了解,只要知道sequence diagram與class diagram 兩張圖就可以了。也不見得需要會畫,但是需要看得懂。

一種程式語言

我建議Java。 建議Java的理由不是因為他特別好、特別帥,而是因為我比較熟。 基本上,只要是屬於OO導向的,其實任何一種語言都可以。 沒錯,design pattern 無關乎語言種類

話說回來,所謂的物件導向,也是「沒講你不會留意到」的東西呀!

沒有留言 :

您或許對這些有興趣

Related Posts with Thumbnails

最後

謝謝您的閱讀,希望您可以有豐富的收獲。