Command Pattern 與 Strategy Pattern 的差異

有一天...

被問了一個問題,在實作登入功能時,如果要支援不同的登入方式(ex: FB/google/twitter),那麼該使用Strategy Pattern還是Command Pattern?

對於design pattern本身就不算瞭解,被問到這問題真的是完全無法解釋。開始了漫長的辜狗之旅,但看了一串又一串的討論還是無法解釋之後,決定配合字面定義來看:

COMMAND: 命令

命令通常有—發號命令者、接受命令者(負責決定如何執行)、命令、命令執行對象。比如說Gwen叫Howie去打掃(家裡),Gwen是發號命令者,命令的內容有 1.任務:打掃 2.任務執行者:Howie 3.任務對象:家裡。發號命令者可以決定他要執行什麼命令,對誰執行或是更改任務。比如說Gwen也可以選擇要他家的貓Uno去打掃(變更接受命令者),或是Gwen可以叫Howie去打掃隔壁老王的家(更變執行對象),又或是可以叫Howie把家裡重新裝潢一次(變更任務)。

STRATEGY: 策略

根據形勢發展而制定的行動方針或方法,目的是完成一個明確的任務。策略說的是不同物件(形勢發展),執行同樣的動作時(如前例:打掃家裡),會採取不同的路徑(行動方針,策略)。之前的例子用策略的角度來看就是:同樣是打掃,Howie與Uno打掃的方式就完全不一樣(實際上,Uno是一隻貓)

我們來看一下Wiki上面對於Command & Strategy的design pattern的解說:

Command pattern is a behavioral design pattern in which an object is used to represent and encapsulate all the information needed to call a method at a later time.

Formally speaking, the strategy pattern defines a family of algorithms, encapsulates each one, and makes them interchangeable.

Sublime Text2: Javascript 開發環境設定

使用ST2開發也有一段時間,是時候整理一下開發環境的設定了。本篇文章僅針對Javascript/Node.js開發環境。

套件

使用套件之前記得先安裝Package Manager (安裝方式參考這裡)。

  • BracketHighlighter:以較明顯的方式顯示目前程式區段的開頭與結尾
  • DocBlockr:建立註解的小幫手
  • Git:Git控制台,可直接在sublime中執行git的指令
  • GitGutter:顯示新增/刪除/修改的程式碼區塊
  • Javascript Snippets:常用javascript程式碼片段
  • JS Snippets:常用javascript程式碼片段2
  • JsFormat:程式碼格式工具
  • JSLint:程式碼檢查工具
  • Live Reload:即時於瀏覽器上重新載入更新的檔案
  • NodeJS:Node.js支援,包含常用函式、執行node.js等
  • SideBarEnhancements:增加側邊欄的功能,如檔案/資料夾的操作、搜尋等
  • SublimeTODO:TODO/FIXME/WARN管理
  • TernJS:提供code completion, jump to definition等功能

Javascript入門學習資源整理

整理了一些Javascript入門資源,給有心想踏入這個世界的人參考參考嘍。

書籍

  1. ppk on JavaScript:從實例學JavaScript
  2. JavaScript 編程精解 (Eloquent JavaScript: A Modern Introduction to Programming))
  3. JavaScript 大全 第六版(JavaScript The Definitive Guide, 6th Edition)

網路學習

  1. MDN
  2. Codecademy
  3. Javascript基礎介紹 投影片
  4. Javascript基礎介紹 範例題目

評估

  1. js-assessment 中文版