Gof Design Pattern

Creational 建構模式

關於如何有效率的產 生、管理 與操作物件,一直都是需要討論的議題, 而Creational Pattern主要用來處理如何生成及建立物件。

Abstract Factory(把零件組成產品)

Package 名稱 說明
factory Factory 表示抽像工廠類別(產生Link,Tray,Page)
factory Item 統一處理Link與Tray的的類別
factory Link 抽像類別:表示出HTML鏈結
factory Tray 抽像類別:表示出Link和Tray
factory Page 抽像類別:表示出HTML網頁
Main 測試用主程式
listfactory ListFactory 表示具體工廠的別(產生listLink,ListTray
listfactory ListLink 實作類別:Link類別的實作
listfactory ListTray 實作類別:Tray類別的實作
listfactory ListPage 實作類別:Page類別的實作

範例類別UML一覽表

Abstract Factory UML類別圖

Factory Method(建立物件工作交由子類別)

Package 名稱 說明
framework Product 抽像類別:僅定義抽像方法use
framework Factory 抽像類別:實作create方法
idcard IDCard 實作Product類別
idcard IDCardFactory 實作Factory類別
Main 測試用主程式

Factory Method Pattern類別一覽表

Factory Method UML類別圖

Builder(組合物件個體)

名稱 說明
Builder 建立文件時的方法類別
Director 產生一個文件的類別
TextBuilder 產生plaintext格式
HTMLBuilder 產生HTML格式
Main 測試用主程式

Builder Pattern 類別一覽表

Builder UML類別圖

Prototype

套件 名稱 說明
Framework Product 抽像方法use與createClone的介面
framework Manager 使用createClone復製物件的類別
MessageBox 把字串框起來use的別,具體實作了use與createClone方法
UnderlinePen 把字串加上底線的類別,具體實作了use與createClone方法
Main 測試用主程式

Prototype Pattern 類別一覽表

Prototype UML類別圖

Singleton(唯一的物件個體)

名稱 說明
Singleton 建立單一物件實例的類別
Main 測試用主程式

Singleton Pattern 類別一覽表

Singleton UML類別圖

Structural 結構模式

如何設計物件之間 的靜態結構,如何完成物件之間的繼承、實 現與依賴關係,這關乎著系統設計出來是否健壯(robust):像是易懂、易維護、易修改、耦合度低等等議題。Structural 模式正如其名,其分類下的模式給出了在不同場合下所適用的各種物件關係結構。

名稱 說明
Banner 代表即有的內容
PrintBanner 轉換器
Print 需要的結果
Main 測試用主程式

Adapter pattern(繼承) 類別一覽表

Adapter Pattern可分為下列二種型式:

  • 類別Adapter Pattern(使用繼承實作)

Adapter pattern(繼承) UML類別圖

  • 物件的Adapter Pattern(使用委讓方式實作)

Adapter pattern(委讓) UML類別圖

  • Bridge(功能與實作的橋樑)
功能/實作 名稱 說明
功能階層 Display 列印內容
功能階層 CountDisplay 新增功能,可指定列印次數
實作階層 DisplayImpl 抽像類別:定義列印功能的操作方法
實作階層 StringDisplayImpl 以字串輸出進行列印
Main 測試用主程式

Bridge Pattern 類別一覽表

Bridge Pattern UML類別圖

  • Composite(對容器與內容一視同仁)
名稱 說明
Entry 表代File與Directory一視同仁的抽像類別
File 表示檔案
Directory 表示目錄
FileTreatmentException 例外處理類別
Main 測試用主程式

Composite Pattern 類別一覽表

Composite UML類別圖

  • Decorator(對裝飾與內容一視同仁)
名稱 說明
Display 列印字串用抽像類別
StringDisplay 只有1行的列印字串用類別
Border 表示裝飾外框的抽像類別
SideBorder 只在左右加上裝飾外框的類別
FullBorder 在上下左右皆加上飾外框的類別
Main 測試用主程式

Decorator Pattern 類別一覽表

Decorator UML類別圖

  • Facade(單一窗口)
套件 名稱 說明
Pagemaker Database 從郵件信箱取得使用者名稱的類別
Pagemaker HtmlWriter 產生HTML檔的類別
pagemaker PageMaker 根據郵件信箱產生使用者網頁的類別
Main 測試用主程式

Facade Pattern 類別一覽表

Facade UML類別圖

  • Flyweight(有相同就共用)
名稱 說明
BigChar 表示大型文字
BigCharFactory 共用並產生BigChar的物件
BigString 表示多個BigChar所產生的大型文字
Main 測試用主程式

Flyweight Pattern 類別一覽表

Flyweight UML類別圖

  • Proxy(要使用在建立)
名稱 說明
Printer 表示有命名之印表機的類別(本人
Pintable Printer與printerProxy共用的介面
PrinterProxy 表示有命名之印表機的類別(代理人)
Main 測試用主程式

Proxy Pattern 類別一覽表

Proxy UML類別圖

Behavioral 行為模式

  • Chain of Responsibility(責任傳送)
名稱 說明
Trouble 表示發生問題的類別,內含問題編號
Support 解決問題的抽像類別
Nosupport 解決問題的具體類別,永遠不解決
LimitSupport 解決問題的具體類別,只解小於指定的編號
OddSupport 解決問題的具體類別,只解決奇數編號
SpecialSupport 解決問題的具體類別,只解決特殊編號
Main 測試用主程式

Chain of Responsibility Pattern 類別一覽表

Chain of Responsibilit UML類別圖

  • Command(將命令寫成類別)
Package 名稱 說明
command Command 表示命令的介面
command MacroCommand 表示結合多個命令的類別
drawer DrawCommand 表示點的繪製命令
drawer Drawable 表示繪製對像的介面
drawer DrawCanvas 表示繪製對向的類別
Main 測試用主程式

Command Pattern 類別一覽表

Command UML類別圖

  • Interpreter(以類別表達文法規則)
名稱 說明
Node 樹狀部析中[節點]類別
ProgramNode 對應[program]的類別
CommandListNode 對應[command list]的類別
CommandNode 對應[command]的類別
RepeatCommandNode 對應[repeat command]的類別
PrimitiveCommandNode 對應[primitive command]的類別
Context 表示文法解析之前後關係
ParaseException 文法解析中的例外處理
Main 測試用主程式

Interpreter Pattern 類別一覽表

Interpreter UML類別圖

  • Iterator(遞增)
名稱 說明
Aggregate 聚合介面
Iterator 執行遞增、Scan的介面
Book Book類別
BookShelf 書架類別
BookShelfIterator 掃瞄書架類別
Main 測試用主程式

Iterator Pattern 類別一覽表

Itorator Pattern UML類別圖

  • Mediator(只要面對一個顧問)
名稱 說明
Mediator 決定顧問介面API
Colleague 決定成員介面API
ColleagueButton 實作Colleagues介面,代表按鈕
ColleagueTextField 實作Colleague介面,代表輸入文字
ColleagueCheckbox 實作Colleague介面,代表勾選項目
LoginFrame 實作Mediator介面,代表登入對訊框
Main 測試用主程式

Mediator Pattern 類別一覽表

Mediator UML類別圖

  • Memento(儲存狀態)
Package 名稱 說明
game Memento 表示Game狀態
game Gamer 遊戲者的類別,產生Memento物件
Main 測試用主程式

Memonto Pattern 類別一覽表

Memonto UML類別圖

  • Observer(通知狀態變化)
名稱 說明
Observer 表示觀察者的介面
NumberGenerator 表示產生數值之物件的抽像類別
RandomNumberGenerator 亂數產生數值
DigitObserver 以數字表示數值
GraphObserver 以長條圖表示數值
Main 測試用主程式

Observer Pattern 類別一覽表

Observer UML類別圖

  • State(以類別表示狀態)
名稱 說明
State 表示金庫狀態的介面
DayState 實作State的類別,代表白天的狀態
NightState 實作State的類別,代表夜晚的狀態
Context 管理金庫的狀態變化,與保全中心聯絡的介面
SafeFrame 實作Context的類別,包含使用者介面
Main 測試用主程式

State Pattern 類別一覽表

State UML類別圖

  • Strategy(策略切換)
名稱 說明
Hand 表示猜拳手勢
Strategy 表示猜拳演算法的介面
WinningStrategy 演算法一: 猜贏後繼續出同樣招式
ProbStrategy 演算法二:使用機率計算出下次的招式
Player 遊戲者類別
Main 測試用主程式

Strategy Pattern 類別一覽表

Strategy UML類別圖

  • Template Method(實際處理交給子類別)
名稱 說明
AbstractDisplay 僅實作display方法的抽像類別
CharDisplay 實作AbstractDisplay
StringDisplay 實作AbstractDisplay
Main 測試用主程式

Template Pattern 類別一覽表

Template Method Pattern UML類別圖

  • Visitor(在結構中穿梭自如)
名稱 說明
Visitor 表示訪問檔案或目錄的訪客抽像類別
Acceptor 表示接受Visitor物件的資料結構之介面
ListVisitor Visitor類別的子類,列印檔案或目錄
Entry File與Directory的父類別的抽像類別(實作了Acceptor介面)
File 表示檔案的類別
Directory 表示目錄的類別
FileTreatmentException 發生在對File進行add時的例外類別
Main 測試用主程式

Visitor Pattern 類別一覽表

Visitor UML類別圖