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 模式正如其名,其分類下的模式給出了在不同場合下所適用的各種物件關係結構。
- Adapter(換個包裝再利用)
名稱 | 說明 |
---|---|
Banner | 代表即有的內容 |
PrintBanner | 轉換器 |
需要的結果 | |
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類別圖