摘要:共性的步驟在抽象類內(nèi)公共實現(xiàn),差異化的步驟在各個子類中實現(xiàn)子類為每個步驟提供不同的實現(xiàn)。模板方法將算法的骨架定義為抽象類,允許其子類提供具體行為。迭代器依次訪問對象的元素而不暴露其基礎(chǔ)表示。
大綱
結(jié)構(gòu)模式
Adapter允許具有不兼容接口的類通過將自己的接口包裝到已有類的接口中來一起工作。
Decorator動態(tài)添加/覆蓋對象的現(xiàn)有方法中的行為。
Facade為大量代碼提供簡化的界面。
行為模式
策略模式(Strategy)允許在運行時即時選擇一個算法族中的一個。
模板(Template)方法將算法的骨架定義為抽象類,允許其子類提供具體行為。
迭代器(Iterator)依次訪問對象的元素而不暴露其基礎(chǔ)表示。
為什么可重用的設(shè)計模式?
一個設(shè)計......
...可以靈活地改變(可重用性)
...在修復(fù)舊問題時盡量減少引入新問題(可維護性)
...允許在初次交付之后交付更多功能(可擴展性)。
設(shè)計模式:軟件設(shè)計中給定上下文中常見問題的通用,可重用解決方案。
OO設(shè)計模式典型地顯示類或?qū)ο笾g的關(guān)系和交互,而不指定涉及的最終應(yīng)用程序類或?qū)ο蟆?除了類本身,設(shè)計模式更強調(diào)多個類/對象之間的關(guān)系和交互過程---比接口/類復(fù)用的粒度更大
設(shè)計模式分類
創(chuàng)造性模式
關(guān)注對象創(chuàng)建的過程
結(jié)構(gòu)模式
處理類或?qū)ο蟮臉?gòu)成
行為模式
描述類或?qū)ο蠼换ズ头峙湄?zé)任的方式。
結(jié)構(gòu)模式 (1) Adapter適配器模式(delegation)
適配器模式
意圖:將類的接口轉(zhuǎn)換為客戶期望獲得的另一個接口。將某個類/接口轉(zhuǎn)換為客戶期望的其他形式
適配器允許類一起工作,否則因為不兼容的接口而無法工作。
使用新界面包裝現(xiàn)有課程。 通過增加一個接口,將已存在的子類封裝起來,客戶端面向接口編程,從而隱藏了具體子類。
對象:將舊組件重用到新系統(tǒng)(也稱為“包裝器”)
(2) Decorator裝飾器模式(subtyping and delegation)
使用裝飾器模式的例子
假設(shè)你想要一個堆棧數(shù)據(jù)結(jié)構(gòu)的各種擴展......
UndoStack:一個堆棧,可以讓你撤銷先前的推送或彈出操作
SecureStack:需要密碼的堆棧
SynchronizedStack:串行化并發(fā)訪問的堆棧
和任意可組合的擴展名:
SecureUndoStack:需要密碼的堆棧,還可以讓您撤銷先前的操作
SynchronizedUndoStack:一個序列化并發(fā)訪問的堆棧,也可以讓你撤消以前的操作
SecureSynchronizedStack:...
SecureSynchronizedUndoStack:...
裝飾器
問題:您需要對單個對象進行任意或動態(tài)組合的擴展。為對象增加不同側(cè)面的特性
解決方案:實現(xiàn)通用接口作為要擴展的對象,添加功能,但將主要職責(zé)委托給基礎(chǔ)對象。 對每一個特性構(gòu)造子類,通過委派機制增加到對象上
后果:
比靜態(tài)繼承更靈活
可定制的,有凝聚力的擴展
裝飾者同時使用子類型和委派
裝飾與繼承
裝飾者在運行時組成功能
繼承在編譯時組成功能
裝飾者由多個協(xié)作對象組成
繼承產(chǎn)生一個明確類型的對象
可以混合搭配多重裝飾
多重繼承在概念上是困難的
(3) Facade外觀模式
問題:客戶端社區(qū)的一部分需要一個簡化的界面來實現(xiàn)復(fù)雜子系統(tǒng)的整體功能。
即客戶端需要通過一個簡化的接口來訪問復(fù)雜系統(tǒng)內(nèi)的功能
意圖提供一個統(tǒng)一的接口來取代一系列小接口調(diào)用,相當(dāng)于對復(fù)雜系統(tǒng)做了一個封裝,簡化客戶端使用
為子系統(tǒng)中的一組接口提供統(tǒng)一接口。 Facade定義了一個更高級別的界面,使得子系統(tǒng)更易于使用。
用更簡單的界面包裝一個復(fù)雜的子系統(tǒng)。
這減少了成功利用子系統(tǒng)所需的學(xué)習(xí)曲線。便于客戶端學(xué)習(xí)使用,解耦
它還促進了子系統(tǒng)與潛在的許多客戶的解耦。
外觀模式示例
假設(shè)我們有一組具有接口的應(yīng)用程序來使用MySql / Oracle數(shù)據(jù)庫并生成不同類型的報告,如HTML報告,PDF報告等。
所以我們將有不同的接口集合來處理不同類型的數(shù)據(jù)庫。
現(xiàn)在,客戶端應(yīng)用程序可以使用這些接口來獲取所需的數(shù)據(jù)庫連接并生成報告。
但是,當(dāng)復(fù)雜性增加或界面行為名稱混淆時,客戶端應(yīng)用程序?qū)㈦y以管理它。
所以我們可以在這里應(yīng)用Facade模式,并在現(xiàn)有接口的頂部提供一個包裝接口來幫助客戶端應(yīng)用程序。
策略模式
問題:針對特定任務(wù)存在不同的算法,但客戶端可以根據(jù)動態(tài)上下文在運行時切換算法。
示例:對客戶列表進行排序(冒泡排序,合并排序,快速排序)
解決方案:為算法創(chuàng)建一個接口,并為算法的每個變體實現(xiàn)一個類。
優(yōu)點:
易于擴展新算法實現(xiàn)
從客戶端上下文中分離算法
(2) Template Method模板方法
問題:多個客戶共享相同的算法,但具體細節(jié)不同,即算法由可定制的部分和不變的部分組成。 常見的步驟不應(yīng)該在子類中重復(fù),但需要重新使用。
做事情的步驟一樣,但具體方法不同
例子:
執(zhí)行一組測試用例
打開,閱讀,編寫不同類型的文件
解:
算法的常見步驟被分解為抽象類,抽象(未實現(xiàn))基本操作代表算法的可定制部分。共性的步驟在抽象類內(nèi)公共實現(xiàn),差異化的步驟在各個子類中實現(xiàn)
子類為每個步驟提供不同的實現(xiàn)。
模板方法模式
模板方法模式使用繼承+可重寫方法來改變算法的一部分使用繼承和重寫實現(xiàn)模板模式
然而策略模式使用委托來改變整個算法(接口和ad-hoc多態(tài)性)。
模板方法廣泛用于框架
該框架實現(xiàn)算法的不變量
客戶端自定義為算法提供專門的步驟
原則:“不要打電話給我們,我們會打電話給你”。
(3) Iterator迭代器模式
問題:客戶需要統(tǒng)一策略來訪問容器中的所有元素,而與容器類型無關(guān)
解決方案:迭代的策略模式
后果:
隱藏底層容器的內(nèi)部實現(xiàn)
支持統(tǒng)一接口的多種穿越策略
易于更改容器類型
促進計劃各部分之間的溝通
模式結(jié)構(gòu)
抽象迭代器類定義遍歷協(xié)議
每個聚合類的具體迭代器子類
聚合實例創(chuàng)建Iterator對象的實例
聚合實例保持對Iterator對象的引用
總結(jié)結(jié)構(gòu)模式
適配器允許具有不兼容接口的類通過將自己的接口包裝到已有類的接口中來一起工作。
裝飾器動態(tài)添加/覆蓋對象的現(xiàn)有方法中的行為。
外觀模式為大量代碼提供簡化的界面。
行為模式
策略模式允許在運行時即時選擇一個算法族中的一個。
模板方法將算法的骨架定義為抽象類,允許其子類提供具體行為。
迭代器依次訪問對象的元素而不暴露其基礎(chǔ)表示。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/71347.html
摘要:代碼使用泛型類中不依賴于類型參數(shù)的方法。委托依賴于動態(tài)綁定,因為它要求給定的方法調(diào)用可以在運行時調(diào)用不同的代碼段。委托捕獲操作并將其發(fā)送給另一個對象。委托可以被看作是在對象層次上的復(fù)用機制,而繼承是類層次上的復(fù)用機制。 大綱 設(shè)計可復(fù)用的類 繼承和重寫 重載(Overloading) 參數(shù)多態(tài)和泛型編程 行為子類型與Liskov替換原則 組合與委托 設(shè)計可復(fù)用庫與框架 API和庫...
摘要:大綱什么是軟件復(fù)用如何衡量可復(fù)用性可復(fù)用組件的級別和形態(tài)源代碼級別復(fù)用模塊級別的復(fù)用類抽象類接口庫級別的復(fù)用包系統(tǒng)級別的復(fù)用框架對可復(fù)用性的外部觀察類型變化例行分組實施變更代表獨立分解常見行為總結(jié)什么是軟件復(fù)用軟件復(fù)用軟件復(fù)用是使用現(xiàn)有軟件 大綱 什么是軟件復(fù)用?如何衡量可復(fù)用性?可復(fù)用組件的級別和形態(tài) 源代碼級別復(fù)用 模塊級別的復(fù)用:類/抽象類/接口 庫級別的復(fù)用:API /包 系...
摘要:設(shè)計方案的容易改變這就是所謂的軟件構(gòu)建的可維護性,可擴展性和靈活性。這也可能表明類型或方法可能難以維護。基于源代碼中不同運算符和操作數(shù)的數(shù)量的合成度量。對修改的封閉這種模塊的源代碼是不可侵犯的。 大綱 軟件維護和演變可維護性度量模塊化設(shè)計和模塊化原則OO設(shè)計原則:SOLIDOO設(shè)計原則:GRASP總結(jié) 軟件維護和演變 什么是軟件維護? 軟件工程中的軟件維護是交付后修改軟件產(chǎn)品以糾正故障...
摘要:抽象工廠模式將具有共同主題的對象工廠分組。對可重用性和可維護性設(shè)計模式的高層考慮創(chuàng)造性模式工廠方法模式也稱為虛擬構(gòu)造器意圖定義一個用于創(chuàng)建對象的接口,但讓子類決定實例化哪個類。 大綱 創(chuàng)造性模式 工廠方法模式創(chuàng)建對象而不指定要創(chuàng)建的確切類。 抽象工廠模式將具有共同主題的對象工廠分組。 Builder模式通過分離構(gòu)造和表示來構(gòu)造復(fù)雜的對象。 結(jié)構(gòu)模式 Bridge將抽象從其實現(xiàn)中分...
閱讀 2517·2023-04-25 19:31
閱讀 2267·2021-11-04 16:11
閱讀 2819·2021-10-08 10:05
閱讀 1528·2021-09-30 09:48
閱讀 2327·2019-08-30 15:56
閱讀 2423·2019-08-30 15:56
閱讀 2186·2019-08-30 15:53
閱讀 2280·2019-08-30 15:44