Design Patterns 簡介

Design Patterns 簡介
Reference Design Pattern入門實作班

Design Patterns 是針對一些常見的軟體發展問題的『可重用物件導向』解決方案,它考慮各種物件和類別的關係。

What is Design

A design is a plan for how to build a thing.
To design is to build a thing in one's mind but not yet in the real world.

Source code is the software design (軟體設計就是原始碼)。 code 是寫給人看的, 給電腦執行的, 故Coding時要注意以下四點
  • 可讀性
  • 可瞭解性
  • 可維護性
  • 可擴充性
What is Pattern 以字面意義解釋:模式就是一再出現的東西、事件、現象。
以設計意義解釋:模式是一種公式,一個模式解決某一個特定問題的公式。 就像數學的公式....並不是所有的數學都可以從一個特定公式可以解決。

設計模式的目的

  • 紀錄及重覆使用已知的成功經驗
  • 提供一種結構的文件化方式
  • 因為結構化了, 所以更容易理解內容及物件導向系統

Each Pattern is a three-part rule, which express a relation between a certain context, a problem, and a solution.

A pattern is a solution to a problem in a context.
A pattern is a solution to a recurring problem in a context.
A pattern is a proven solution to a recurring problem in a context.
A pattern is a proven solution to a recurring problem in a specific context.
A pattern is a proven solution to a recurring problem in a specific context, and more...

  1. 對於不理解Pattern設計的人是否容易造成像天書般的程式內容
  2. 是否混用了太多的Pattern而導致更混亂的結構
  3. Pattern 應該選擇適合且有效率的.
常見模式的種類
  • Analysis Pattern
  • Software Archiecture Pattern
  • Design Pattern
  • Implementation Pattern
  • HCI Pattern
模式的六大基本樣式
  1. Name : 樣式名稱
  2. Context : 描述問題發生的地形地物
  3. Problem : 問題
  4. Force : 問題的特性或限制。它是推擠與拉扯Problem的作用力,也是塑造Solution的決定因素。 (很多解決的方案都因為Force而變得很特別......)。
  5. Solution : 解決的方法
  6. Resulting Context (Consequence) : 套用解決方案之後的結果
6 個物件導向設計觀念
  1. Class、Object、Instance
  2. Interface
  3. Inheritance
  4. Polymorphism
  5. Composition
  6. Delegation
6 個物件導向設計原則
  1. 模組化
  2. 減少耦合,增加內聚
  3. 尋找hot spot
  4. 生物多樣性原則
  5. Programming to an interface, not an Implementation (GoF)
  6. Favor object composition over class inheritance (GoF)
Design Pattern 三大分類
Structural Pattern (結構性模式)
decorator
裝飾者
動態地為物件增加責任
proxy
代理
用一個物件來代表另一個物件
bridge
橋接
物件有多屬性時,把屬性之間的關聯關係從 m x n 改為 m + n
composite
組合者
建立一個自相似的樹形結構的節點
flyweight
享元
用一個共用的實體來加快存取
adapter
適配器
為多個不同的類別之間建立連接的介面
facade
外觀
透過一個介面來隱藏整子系統
Creational Pattern (建立型模式)
abstract
抽象工廠
建立類別家族的實體
builder
建構者
把物件的建構和其它程式碼分開
prototype
原型
建立一個被完整初始化的 instance , 使用者複製或clone時機
factory method
工廠方法
建立一個共通介面的若干個子類別的實體
singleton
單體
使一個類別無論在何時建構, 都只有一個instance
Behavioral Pattern (行為型模式)
strategy
策略
採取不同的演算法進行不同的處理
state
狀態
當物件的狀態變更時,變更處理
templete method
樣本方法
把通用的處理放在父類別,具體的實現步驟放在子類別中實作
chain of responsibility
職責鏈
在一個鏈中傳遞任務
command
命令
把命令包裝成物件
iterator
迭代器
循環地存取一個串列中的元素
mediator
協調者
在物件之間建立一個簡化的溝通類別
observer
觀察者
當物件發生變化時通知一組其他的物件
visitor
訪問者
在不改變物件定義的情況下、定義應用於物件的操作
interpreter
直譯者
在一個語言環境中,不同的語言元素代表不同的語義
memento
備註
儲存物件內部的數值
GoF (Gang Of Four) 設計模式的格式
  1. Pattern Name
  2. Intent
  3. Also know as
  4. Motivation
  5. Applicability
  6. Structure
  7. Participants