2009年6月12日 星期五

參悟物件設計模式-使用Delphi

參悟物件設計模式-使用Delphi



CH2
P.02-7
GOF 23種 Pattern分類表

CH3
Template Method Pattern(範本方法模示): 使用的是繼承
sample: 印表機
01.隱藏(封裝): 把實作放在private, public放公開給外界呼叫的Method
02.擴充(多型): 在protected處利用virual(or dynamic)關鍵字讓後代能利用override方式產生多型的效果.還可再加上abstract變成純虛擬,強迫子代實作

abstract若未被override, design-time還是能pass, run-time時才會有error.


06.Delphi中只有抽象方法(純虛擬方法),沒有抽象類別
C#, Java中 有抽象方法,也有抽象類別(只要有抽象方法,則該類別必須為抽象類別)

P.03-28
Template與其它模式的比較
Factory是應用Template模式來產生物件個體的一種典型範例
Template是利用"繼承"來封裝演算法的,相較之下,Strategy則是使用"委讓合成"的方式

CH4 Strategy 模式 (策略模示)
sample: 印表機
01.不同廠牌Printer; LPT Port, USB Port;
02.應用OCP法則
03.此處會產生二種架構的選擇來自於物件繼承的夢魘
04.應用SRP法則

P.04-55 ~ P.04-66
Delphi的delegate, 有談到TNotifyEvent

CH5 Adapter 模式
01.跟廠商買了一個紅外線連接埠的程式庫
02.即將改版的方法、尚不準備改版的方法

P.05-28
Adapter與其它模式的比較
Adapter是用來連接相異介面的類別時所使用的模式,而Bridge則是用來連接功能階層和實作階層的模示。
Adapter是用來填補介面間差距的的模式,而Decorator是不需要更改介面即可新增功能的模示。
Adapter是用來連接相異介面的類別時所使用的模式,而Proxy則是用來連接相同介面的類別時所使用的模式。

CH6 Proxy 模式
sample: 印表機印三次內容
A.未使用proxy
開啟
印內文
關閉
開啟
印內文
關閉
開啟
印內文
關閉

B.使用proxy
開啟
印內文
印內文
印內文
關閉

Proxy與其它模式的比較
01.Adapter是用來連接兩個相異介面的類別時所使用的模式,而Proxy則是用來連接相同介面的類別時所使用的模式,你會發現在Proxy模示中的Proxy參與者與RealSubject參與者因為都是繼承自Subject參與者,所以,兩者的介面是相同的,即具有通透產,亦即用戶端不會因為使用Proxy參與者或是RealSubject參與者而需要做不同的改變。
02.Decorator與Proxy的實作很相似,但目的卻不盡相同。Decorator的目的是為了新增其他功能,而Proxy則比較著重在代替本人進行作業,以減少對本人的存取動作,而較不會新增其他功能。

CH7 Bridge 模式
sample: 把視窗位置記錄下來,下次開在同一個位置 by 登錄檔 or ini

P.07-44
相關的Pattern
01.Adapter的功能是連接兩個相異介面的類別時所使用的模式,通常是在系統已有現存的類別,新的類別為了和現存類別和平共存,而採取的一種不得不的模示,而Bridge 的功能是將功能性類別由實作性類別中抽離,放入另一類別階層中,並讓系統中的功能性類別實作性類別分別獨立開來,通常是系統設計開發初期就採取的模示,以讓"功能性類別階層"和"實作性類別階層"中的類別能在不影響彼此的狀況下,個別衍生出子類別,再互相結合,產生高彈性的系統設計模示。
02.Abstract Factory Pattern
"Abstract Factory Pattern"是基於"Bridge Pattern",而產生與組態出更配合相關環境條件的模示。

CH8 Singleton 模式(單例模示)
sample: TApplication

P.08-19
相關的Pattern
下列幾個模示,通常使用"單例模示",來維持只有一個物件個體
01.Abstract Factory Pattern(抽象工廠模示)
02.Builder Pattern(建造者模示)
03.Facade Pattern(表象模示)
04.Prototype Pattern(雛形模示)

CH9 Factory Method Pattern(工廠方法模示)
sample: 申請信用卡、現金卡

P.09-49
相關的Pattern
01.Template Pattern
"工廠方法模示"是"範本方法模示"是典型的應用,主要目的為制定建立物件的範本方法,如範例中的ApplyCard。
02.Singleton Pattern在"工廠方法模示"中的工廠類別,通常會使用"單例模示"的手法,因為在同一程式中不太需要有兩個以上的工廠物件個體,在本範例中採用"單例模示"的手法來建立代表具象工廠類別集合清單的 TDDPCardFactoryList 類別實體,又再一次採用"單例模示"的手法來確保具象工廠類別實體,只在 TDDPCardFactoryList 中產生一個實體。
03.Abstract Factory Pattern
"抽象工廠模示"通常是使用"工廠方法模示"來實作產品組製作工廠中個別產品的建立。

CH10 Observer Pattern(觀察者模示)
sample: 訊息通知HD觀察者、Monitor觀察者、System觀察者

P.10-31
Delphi的通知機制
Notifity, message,Attach, Detach

P.10-46
相關的Pattern
01.Mediator Pattern
在協調者模示中的居間協調參與者和同事參與者之間的溝通協調,可能會使用到"觀察者模示","協調者模示"和"觀察者模示"兩個模示在"通知狀態變化"這點相當類似,不過兩者之間的目的和觀點角度並不相同。
"協調者模示"也會通知狀態變化,但通知狀態變化僅是"協調者模示"的一部份,"協調者模示"的主要目的還是在居間協調各同事參與者間的動作。
而"觀察者模示"的重點則是放在對多個"觀察者參與者"來通知"主題參與者"的狀態變化,並在通知後能同步更新"觀察者參與者"的狀態。

CH11 Mediator Pattern(協調者模示)
sample: 登入畫面

P.11-35
相關的Pattern
01.Facade Pattern
在"協調者模示"中的協調參與者是扮演同事參與者的協調人,屬於雙向溝通,而"表象模示"中的表象參與者則是單向的利用其他的子系統參與者,屬於單向傳達。
02.Observer Pattern
在"協調者模示"中的協調參與者和同事參與者之間的溝通協調,可能會使用到"觀察者模示"。

CH12 State Pattern(狀態模示)
sample: 投幣式公共電話

P.12-30
相關的Pattern
01.Singleton Pattern
在"狀態模示"中的具象狀態參與者有時會使用"單例模示"來實作。
02.Flyweight Pattern
當在"狀態模示"中的狀態參與者沒有物件個體欄位時,有時會使用"享元模示"來實作,以使兩個以上的 Context 參與者共同具象狀態參與者。

CH13 Composite Pattern(合成模示)
CH14 Decorator Pattern(裝飾者模示)
CH15 Command Pattern(命令模示)
CH16 其他的模示