Singleton

  • 讓特定的 instance 只有唯一 instance,即第二次建立的新 object 仍與第一次建立的是同一個
  • Object Literal:每次使用 literal 即已建立 singleton,因 JavaScript 中除非是同一 object,否則 object 不可能相等
  • Constructor Function 方法有二:
    1. 可將 instance 的 cache 放在 static property 中,缺點是其為 public 可能被更動
    2. 將 instance 包進 closure,保持其為 private

Factory

  • 便於建立相似的 object,提供一個建立方式(如以不同字串辨別),且無須先知道明確型別
  • Object() constructor 的行為也是 factory,會根據輸入內容產生不同 object

Iterator

  • 提供資料的集合,以藉由簡單的操作來存取個別元素(如 next()hasNext()

Decorator

  • 在執行時期可動態加入新功能至 object

Strategy

  • 在執行時期選擇適合處理的 algorithm
  • 實例:validator 自動選擇不同檢查類型

Facade

  • 提供替代介面,以保持 method 簡短
  • 例如有多個 methods 常會同時被呼叫,則可另外建立一個新 method 包裝這些會一起呼叫的 methods

Proxy

  • 控制存取權,將多個操作組合,以避免昂貴運算(例如多個 request 組合成一個)

Mediator

  • 讓各個獨立 object 不直接溝通,透過 mediator 進行溝通以降低 coupling,提升可維護性
  • 白話一點就是不要讓 object 認識太多其他 object,維護時會有困難;讓大家只專注在自己的工作即可,並由 mediator 負責彼此的溝通

Observer (PubSub)

  • 又稱 custom events,同樣也是為了降低 coupling 以提升可維護性
  • 使 object 不再直接呼叫其他 object 的 method,而是 subscribe 其他 object 的特定活動,並在 event 發生時由 publisher 通知 subscribers