亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

Delphi模式編程之策略模式(上)

2019-11-18 18:23:07
字體:
來源:轉載
供稿:網友

Delphi模式編程之策略模式

劉 藝
 

1.1                         模式解說

策略(Strategy)模式的用意是定義一組算法(algorithms),并將每個算法封裝到具有共同接口的獨立的類中,從而使它們可以相互替換。策略模式讓算法變化獨立于使用它的客戶端。
要了解策略模式的使用動機和意義,我們得先從一個有趣的例子說起。在一個物料管理系統中,出庫和入庫模塊是該系統的核心部分(下面我們以出庫為例進行分析)。
對于一個沒有面向對象編程經驗的程序員,他們往往會把出庫的所有邏輯都放在客戶端(出庫單界面),并在客戶端利用條件分支語句來判斷該出庫單類型是領料、借料還是報損,以便選擇不同的出庫結算方法,如圖 1‑1所示。這樣一來,客戶端的代碼就變得復雜和難以維護。比如:需要新增調撥單類型的出庫時,就要修改判斷條件,重新編譯和發布客戶端。當情況愈來愈復雜,條件分支會愈來愈多,添加的程序代碼也會愈來愈多,這樣讓客戶端愈來愈大并難以維護,互相影響和出錯的可能性增大。
 
1‑1 基于面向過程思想設計的出庫模塊
如果用面向對象的思想來分析,可以把領料單、借料單、報損單看作是出庫單的派生類,如圖 1‑2所示。這樣出庫單作為單據基類提供單據的共同接口,而利用繼承的辦法在子類里實現不同的出庫行為。這實際上利用了面向對象里的一個重要概念:多態。
但是這樣的設計還有美中不足的地方,這就是環境和行為緊密耦合在一起。也就是說,單據和具體出庫的算法緊密耦合在一起。強耦合使得兩者不能獨立演化,限制了重用性和擴展性。
圖 1‑3是利用策略模式重新設計的出庫模塊。出庫單據對象通過一個出庫操作對象(即策略模式中的Context)來引用出庫策略對象。各種具體的出庫策略則由出庫策略類的派生類實現。出庫單據可以由出庫操作和單據樣式分別提供出庫結算方法和單據顯示界面。這樣,策略模式就把出庫的行為從出庫單據的環境中獨立出來,出庫算法的增減、修改都不會影響到環境和客戶端。
1‑2基于面向對象思想設計的出庫模塊
1‑3基于設計模式思想設計的出庫模塊
策略模式的優勢在于算法和環境的分離,兩者可以獨立演化。為了更好地說明算法和環境分離的好處,我們不妨看一下圖 1‑4的設計。在這個設計中,已經沒有出庫和入庫模塊的概念,因為我將所有出/入庫單據抽象出來,在運行期動態組合單據的界面和行為。通過出/入庫操作類,可以維護、查詢、配置不同的行為類。抽象出的出/入庫行為以策略類的方式封裝了其對應的算法,以便完成不同類型的出入庫單據的操作。這就顯而易見地提高了系統的重用性和可擴展性,減低維護的難度。
1‑4 策略模式的優勢在于算法和環境的分離,兩者可以獨立演化
由此可見,策略模式適用于以下情形:
·           當許多相關的類之間的差異只在于其行為時。策略模式可以動態地讓一個對象在許多行為中選擇一種行為。
·           當實現一個目的有多種可選算法時,比如:你出于不同的利弊權衡考慮定義的那些算法(即相當于應用不同的策略)。這些具體的算法可以封裝成抽象算法類的派生類,并享用該抽象算法類的統一接口。通過多態性,客戶端只要持有一個抽象算法類的對象,就可以選用任何一個具體的算法。
·           當一個算法使用的數據不可以讓客戶端得知時。使用策略模式可以避免暴露復雜的與算法相關的數據結構。其實客戶端也沒有必要知道這些與算法相關的知識和數據。
·           當一個類定義有很多行為,且用多個條件語句來判斷選擇這些行為時。策略模式可以把這些行為轉移到對應的具體策略類中,從而避免了難以維護的多重條件選擇,體現了面向對象的編程思想。

1.2                         結構與用法

策略模式的結構如圖 1‑5所示,它包括了以下參與者:
·           抽象策略(TStrategy)——為所有支持的算法聲明一個共同的接口。TContext使用這個接口調用由TConcreteStrategy定義和封裝的算法。
·           具體策略(TConcreteStrategy)——封裝了具體算法或行為。實現TStrategy接口。
·           上下文(TContext)——持有一個到TStrategy的引用。調用TStrategy接口,動態配置具體算法或行為。
1‑5策略模式的結構
在策略模式中,通過TStrategy和TContext的交互實現所選擇的算法。當算法被調用時, TContext可以將該算法所需要的所有數據都傳遞給該TStrategy?;蛘?,TContext可以將自身作為一個參數傳遞給TStrategy操作。
當TContext將客戶端請求轉發給它的TStrategy時,客戶通常創建并傳遞一個TConcreteStrategy對象給該TContext;這樣, 客戶端僅與TContext交互。通常有一系列的TConcreteStrategy類可供客戶端從中選擇。
 
 
 -------------------------------------------------------------------------------------------

更多相關文章和示例程序源代碼可以到作者網站下載:http://www.liu-yi.net

上一篇:Delphi7目錄結構----初學者參考

下一篇:Delphi背后---初學者參考之二(1)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲天堂男人天堂| 69av成年福利视频| 欧美高清第一页| 国产视频欧美视频| 日韩av免费网站| 亚洲男人天堂2024| 国产成人在线一区| 国产成人一区二区三区电影| 久久香蕉精品香蕉| 国产欧美精品va在线观看| 欧美性在线视频| 亚洲女同性videos| 欧美精品videossex88| 欧美性猛交xxxxx免费看| 久久久国产精品亚洲一区| 成人乱色短篇合集| 国产精品看片资源| 亚洲级视频在线观看免费1级| 日韩欧美极品在线观看| 亚洲片av在线| 日韩高清电影免费观看完整| 日韩成人黄色av| xxxx欧美18另类的高清| 欧美日韩亚洲高清| 91国内揄拍国内精品对白| 日韩av免费观影| 欧美日韩一二三四五区| 91精品免费看| 欧美日韩美女在线观看| 亚洲欧洲日韩国产| 国产精品久久久久久久久久小说| 韩国欧美亚洲国产| 中文字幕成人在线| 97国产精品人人爽人人做| 国产成人在线精品| 亚州国产精品久久久| 亚洲精品美女网站| 亚洲精品欧美极品| 91精品久久久久久综合乱菊| 亚洲精品乱码久久久久久金桔影视| 久久亚洲国产精品成人av秋霞| 欧美日韩精品中文字幕| 精品久久久久久久久久久久久久| 亚洲国产精品悠悠久久琪琪| 色阁综合伊人av| 欧美日韩另类字幕中文| 欧美亚洲国产成人精品| 色偷偷av一区二区三区乱| 热久久这里只有精品| 韩国国内大量揄拍精品视频| 日韩在线观看高清| 久久免费视频这里只有精品| 亚洲国产精品va| 国产精品∨欧美精品v日韩精品| 欧美日韩xxxxx| 国产精欧美一区二区三区| 国产日韩中文字幕在线| 成人高清视频观看www| 日韩av大片免费看| 久久久久久尹人网香蕉| 日韩美女写真福利在线观看| 欧美第一黄网免费网站| 国产精品视频免费在线| 欧美俄罗斯乱妇| 欧美成人免费全部观看天天性色| 欧美最猛性xxxxx亚洲精品| 国产精品久久久久久久久久99| 日韩在线观看你懂的| 国产亚洲a∨片在线观看| 国产精品日韩在线观看| 97在线视频免费看| 成人黄在线观看| 日韩欧美aⅴ综合网站发布| 欧美性生交xxxxx久久久| 久久久久久久网站| 欧美成人精品xxx| 国产视频在线观看一区二区| 欧美天堂在线观看| 伊人伊成久久人综合网小说| 亚洲综合中文字幕68页| 俺去了亚洲欧美日韩| 欧美孕妇毛茸茸xxxx| 91精品久久久久久久久久久久久久| 日本一欧美一欧美一亚洲视频| 久久久久久久网站| 精品福利免费观看| 亚洲国产精品成人va在线观看| 亚洲美女黄色片| 亚洲精品久久久久久久久久久| 成人久久一区二区三区| 日韩成人中文电影| 亚洲白虎美女被爆操| 日韩精品视频三区| 中文字幕在线成人| 国模视频一区二区三区| 一区二区福利视频| 欧美精品情趣视频| 国产精品高清免费在线观看| 激情懂色av一区av二区av| 欧美黄色小视频| 久久综合九色九九| 久久精品久久久久| 久久中文久久字幕| 精品国产精品三级精品av网址| 美女视频黄免费的亚洲男人天堂| 国产精品夜色7777狼人| 国产91精品不卡视频| 国产精品亚洲视频在线观看| 久久久久久久久久久91| 亚洲第一福利在线观看| 亚洲美腿欧美激情另类| 一个人看的www久久| 日韩欧美成人精品| 精品露脸国产偷人在视频| 97超级碰碰碰久久久| 在线视频欧美性高潮| 午夜精品美女自拍福到在线| 欧美性猛交xxxx| 日韩精品在线影院| 一本色道久久88亚洲综合88| 亚洲综合社区网| 亚洲欧美激情精品一区二区| 亚洲bt天天射| 国产性色av一区二区| 欧美在线观看日本一区| 97超视频免费观看| 亚洲欧美成人一区二区在线电影| 欧美裸体xxxxx| 国产一区二区三区在线看| 亚洲最大激情中文字幕| 欧美猛交ⅹxxx乱大交视频| 久久久久久有精品国产| 日韩亚洲欧美中文在线| 国内伊人久久久久久网站视频| 91亚洲精品一区二区| 日韩一区二区av| 亚洲精品小视频| 国产精品国内视频| 精品国内亚洲在观看18黄| 国产美女主播一区| 欧美大尺度在线观看| 国产精品久久久久久搜索| 国产成人av在线播放| 欧美劲爆第一页| 午夜精品久久久久久久男人的天堂| 91精品国产高清自在线看超| 亚洲精品动漫久久久久| 亚洲香蕉伊综合在人在线视看| 91亚洲国产成人久久精品网站| 欧美成人手机在线| 精品久久久视频| 亚洲社区在线观看| 久久精品一偷一偷国产| 国产精彩精品视频| 亚洲精品suv精品一区二区| 91视频国产精品| 色99之美女主播在线视频| 亚洲网在线观看| 亚洲自拍偷拍在线| 亚洲欧美国产精品va在线观看| 日本精品久久久久影院| 欧美视频在线观看 亚洲欧| 欧美精品激情blacked18| 91久久久久久|