版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、LOGO設(shè)計(jì)模式設(shè)計(jì)模式(Design Pattern) 張凱 副教授計(jì)算機(jī)學(xué)院 軟件工程系武漢科技大學(xué)主要內(nèi)容主要內(nèi)容面向?qū)ο蟮钠叽笤O(shè)計(jì)原則1設(shè)計(jì)模式類型2類與類之間的六大關(guān)系323個(gè)設(shè)計(jì)模式4武漢科技大學(xué)設(shè)計(jì)設(shè)計(jì)模式模式定義定義v設(shè)計(jì)模式的定義 設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié),使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。武漢科技大學(xué)設(shè)計(jì)設(shè)計(jì)模式模式定義定義v設(shè)計(jì)模式的基本要素 設(shè)計(jì)模式一般有如下幾個(gè)基本要素:模式名稱、問題、目的、解決方案、效果、實(shí)例代碼和相關(guān)設(shè)計(jì)模式,其中的關(guān)鍵元素包括以
2、下四個(gè)方面: 模式名稱 (Pattern name) 問題 (Problem) 解決方案 (Solution) 效果 (Consequences) 通過一兩個(gè)詞來為模式命名,以便我們更好地理解模式,并方便開發(fā)人員之間的交流,通常模式都是根據(jù)其功能或結(jié)構(gòu)命名。描述了應(yīng)該在何時(shí)使用模式,它包含了設(shè)計(jì)中存在的問題以及問題存在的原因。描述了一個(gè)設(shè)計(jì)模式的組成部分,以及這些組成部分之間的相互關(guān)系,各自的職責(zé)和協(xié)作方式,通通常解決方案通過常解決方案通過UML類圖和核心類圖和核心代碼進(jìn)行描述。代碼進(jìn)行描述。描述了模式的優(yōu)缺點(diǎn)以及在使用模式時(shí)應(yīng)權(quán)衡的問題。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原
3、則v1.開放封閉原則OCPv2.單一職責(zé)SRPv3.里氏代換LSPv4.依賴倒轉(zhuǎn)DIPv5.迪米特法則LODv6.接口隔離ISPv7.合成聚合復(fù)用原則CARP武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v開放封閉原則OCP 開放封閉原則(Open-Closed Principle,OCP)是面向?qū)ο蟮目蓮?fù)用設(shè)計(jì)(Object Oriented Design或OOD)的基石。其他設(shè)計(jì)原則(里氏代換原則、依賴倒轉(zhuǎn)原則、合成/聚合復(fù)用原則、迪米特法則、接口隔離原則)是實(shí)現(xiàn)開放封閉原則的手段和工具。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v開放封閉原則OCP 定義:一個(gè)軟件
4、實(shí)體應(yīng)當(dāng)對擴(kuò)展開放,對修改關(guān)閉。即在設(shè)計(jì)一個(gè)模塊的時(shí)候,應(yīng)當(dāng)使這個(gè)模塊可以在不被修改的前提下被擴(kuò)展。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v開放封閉原則OCP 滿足開放封閉原則的系統(tǒng)的優(yōu)點(diǎn) a)通過擴(kuò)展已有的軟件系統(tǒng),可以提供新的行為,以滿足對軟件的新需求,使變化中的軟 件系統(tǒng)有一定的適應(yīng)性和靈活性。 b)已有的軟件模塊,特別是最重要的抽象層模塊不能再修改,這就使變化中的軟件系統(tǒng)有 一定的穩(wěn)定性和延續(xù)性。 c)這樣的系統(tǒng)同時(shí)滿足了可復(fù)用性與可維護(hù)性。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v開放封閉原則OCP 如何實(shí)現(xiàn)開放封閉原則 解決問題關(guān)鍵在于抽象化,抽象
5、化是面向?qū)ο笤O(shè)計(jì)的第一個(gè)核心本質(zhì)。 在面向?qū)ο缶幊讨?,通過抽象類及接口,規(guī)定了具體類的特征作為抽象層,相對穩(wěn)定,不需更改,從而滿足“對修改關(guān)閉”;而從抽象類導(dǎo)出的具體類可以改變系統(tǒng)的行為,從而滿足“對擴(kuò)展開放”。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v單一職責(zé)原則SRP 單一職責(zé)原則(Single Responsibility Principle,SRP):一個(gè)類,最好只做一件事,只有一個(gè)引起它變化的原因。 一個(gè)優(yōu)良的系統(tǒng)設(shè)計(jì),強(qiáng)調(diào)模塊間保持低耦合、高內(nèi)聚的關(guān)系。單一職責(zé),強(qiáng)調(diào)的是職責(zé)的分離。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v單一職責(zé)原則SRP 為什么
6、要把這兩個(gè)職責(zé)分離到單獨(dú)的類中呢? 如果一個(gè)類承擔(dān)的職責(zé)過多,等于把這些職責(zé)耦合在了一起。一個(gè)職責(zé)的變化可能會(huì)削弱或者抑制這個(gè)類完成其他職責(zé)的能力。這種耦合會(huì)導(dǎo)致脆弱的設(shè)計(jì),當(dāng)變化發(fā)生時(shí),設(shè)計(jì)會(huì)遭受到意想不到的破壞。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v里氏代換原則LSP 里氏代換原則(Liskov Substitution Principle, LSP):在一個(gè)軟件系統(tǒng)中,子類應(yīng)該可以替換任何基類能夠出現(xiàn)的地方,并且經(jīng)過替換以后,代碼還能正常工作。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v里氏代換原則LSP 一個(gè)軟件實(shí)體如果使用的是一個(gè)基類的話,那么一定適
7、用于其子類。而且它覺察不出基類對象和子類對象的區(qū)別。也就是說,在軟件里面,把基類都替換成它的子類,程序的行為沒有變化。 反過來的代換不成立,如果一個(gè)軟件實(shí)體使用的是一個(gè)子類的話,那么它不一定適用于基類。 任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v依賴倒轉(zhuǎn)原則DIP 依賴倒轉(zhuǎn)原則(dependence inversion principle, DIP): 1高層模塊不應(yīng)該依賴于低層模塊,二者都應(yīng)該依賴于抽象。 2抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象,要針對接口編程,不要針對實(shí)現(xiàn)編程。 也就是說應(yīng)當(dāng)使用接口和抽象類進(jìn)行變量類型聲明、參數(shù)
8、類型聲明、方法返回類型說明,以及數(shù)據(jù)類型的轉(zhuǎn)換等。而不要用具體類。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v依賴倒轉(zhuǎn)原則DIP武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v依賴倒轉(zhuǎn)原則DIP武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v依賴倒轉(zhuǎn)原則DIP 工廠方法模式 模版方法模式 迭代器模式武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v迪米特法則LoD 迪米特法則(Law of Demeter,LoD):又叫做最少知識(shí)原則。就是說,一個(gè)對象應(yīng)當(dāng)對其他對象有盡可能少的了解。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v迪米特法則L
9、oD (1)只與你直接的朋友們通信 (2)不要跟陌生人說話 (3)每一個(gè)軟件單位對其他的單位都只有最少的知識(shí),而且局限于那些本單位密切相關(guān)的軟件單位。 就是說,如果兩個(gè)類不必彼此直接通信,那么這兩個(gè)類就不應(yīng)當(dāng)發(fā)生直接的相互作用,如果其中的一個(gè)類需要調(diào)用另一個(gè)類的某一個(gè)方法的話,可以通過第三者轉(zhuǎn)發(fā)這個(gè)調(diào)用。 武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v迪米特法則LoD 這樣,當(dāng)一個(gè)模塊修改時(shí),就會(huì)盡量少的影響其他的模塊。擴(kuò)展會(huì)相對容易。 門面(外觀)模式和中介者模式實(shí)際上就是迪米特法則的具體應(yīng)用。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v合成聚合復(fù)用原則CARP 合
10、成聚合復(fù)用原則(Composite/Aggregate Reuse Principle,CARP):在一個(gè)新的對象里面使用一些已有的對象,使之成為新對象的一部分;新的對象通過向這些對象的委派達(dá)到復(fù)用這些對象的目的。應(yīng)首先使用合成/聚合,合成/聚合則使系統(tǒng)靈活,其次才考慮繼承,達(dá)到復(fù)用的目的。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v合成聚合復(fù)用原則CARP 優(yōu)先使用對象合成/聚合(UML中的兩個(gè)菱形關(guān)系),而不是類繼承。盡量使用合成/聚合,不使用類繼承,繼承屬于強(qiáng)耦合的結(jié)構(gòu)。 合成聚合復(fù)用好處:優(yōu)先使用對象的合成/聚合將有助于你保持每個(gè)類被封裝,并被集中在單個(gè)任務(wù)上。這樣類和類
11、繼承層次會(huì)保持較小規(guī)模,并且不太可能增長為不可控制的龐然大物。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v合成聚合復(fù)用原則CARP 將抽象部分與它的實(shí)現(xiàn)部分分離,使他們都可以獨(dú)立地變化。 橋接模式就是把抽象和實(shí)現(xiàn)獨(dú)立出來,讓它們各自變化。這就使得每種實(shí)現(xiàn)的變化不會(huì)影響其他實(shí)現(xiàn),從而達(dá)到應(yīng)對變化的目的。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v接口隔離原則ISP 接口隔離原則(interface separate principle,ISP):接口隔離原則:使用多個(gè)專門的接口比使用單一的總接口要好。也就是說,一個(gè)類對另外一個(gè)類的依賴性應(yīng)當(dāng)是建立在最小的接口上。 武漢
12、科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v接口隔離原則ISP 接口往往有兩種不同的含義:一種是指一個(gè)類型所具有的方法特征的集合,僅僅是一種邏輯上的抽象; 另外一種是指某種語言具體的接口定義,有嚴(yán)格的定義和結(jié)構(gòu)。比如c# 語言里面的Interface結(jié)構(gòu)。對于這兩種不同的含義,ISP的表達(dá)方式以及含義都有所不同。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v接口隔離原則ISP 當(dāng)我們把接口理解成一個(gè)類所提供的所有方法的特征集合的時(shí)候,這就是一種邏輯上的概念。接口的劃分就直接帶來類型的劃分。這里,我們可以把接口理解成角色,一個(gè)接口就只是代表一個(gè)角色,每個(gè)角色都有它特定的一個(gè)
13、接口,這里的這個(gè)原則可 以叫做角色隔離原則。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v接口隔離原則ISP武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v接口隔離原則ISP 如果把接口理解成狹義的特定語言的接口,那么ISP表達(dá)的意思是說,對不同的客戶端,同一個(gè)角色提供寬窄不同的接口,也就是定制服務(wù),個(gè)性化服務(wù)。就是僅僅提供客戶端需要的行為,客戶端不需要的行為則隱藏起來。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v接口隔離原則ISP 應(yīng)當(dāng)為客戶端提供盡可能小的單獨(dú)的接口,而不要提供大的總接口。 這也是對軟件實(shí)體之間通信的限制。但它限制的只是通信的寬度,就是說
14、通信要盡可能的窄。武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v接口隔離原則ISP武漢科技大學(xué)面向?qū)ο竺嫦驅(qū)ο蟮钠叽蟮钠叽笤O(shè)計(jì)原則設(shè)計(jì)原則v接口隔離原則ISP武漢科技大學(xué)設(shè)計(jì)模式設(shè)計(jì)模式分類分類v設(shè)計(jì)模式的分類 根據(jù)其目的(模式是用來做什么的)可分為創(chuàng)建型(Creational),結(jié)構(gòu)型(Structural)和行為型(Behavioral)三種: 創(chuàng)建型模式主要用于創(chuàng)建對象。 結(jié)構(gòu)型模式主要用于處理類或?qū)ο蟮慕M合。 行為型模式主要用于描述對類或?qū)ο笤鯓咏换ズ驮鯓臃峙渎氊?zé)。武漢科技大學(xué)設(shè)計(jì)模式設(shè)計(jì)模式分類分類v創(chuàng)建型模式 抽象工廠模式(Abstract Factory) 建造者模式
15、(Builder) 工廠方法模式(Factory Method) 原型模式(Prototype) 單例模式(Singleton) 武漢科技大學(xué)設(shè)計(jì)模式設(shè)計(jì)模式分類分類v結(jié)構(gòu)型模式 適配器模式(Adapter) 橋接模式(Bridge) 組合模式(Composite) 裝飾模式(Decorator) 外觀模式(Facade) 享元模式(Flyweight) 代理模式(Proxy)Attack?要我干啥嘛?要我干啥嘛?武漢科技大學(xué)設(shè)計(jì)模式設(shè)計(jì)模式分類分類v行為型模式 職責(zé)鏈模式(Chain of Responsibility) 命令模式(Command) 迭代器模式(Iterator) 中介者模式
16、(Mediator) 備忘錄模式(Memento) 觀察者模式(Observer) 狀態(tài)模式(State) 策略模式(Strategy) 模板方法模式(Template Method) 訪問者模式(Visitor) 解釋器模式(Interpreter)武漢科技大學(xué)類圖類圖vUML六大關(guān)系 關(guān)聯(lián)關(guān)系(Association) 聚合關(guān)系(Aggregation) 組合關(guān)系(Composition) 依賴關(guān)系(Dependency) 實(shí)現(xiàn)(Realization) 泛化(Generalization)武漢科技大學(xué)類圖類圖v關(guān)聯(lián)關(guān)系(Association) 關(guān)聯(lián)關(guān)系是類與類之間最常用的一種關(guān)系,它是
17、一種結(jié)構(gòu)化關(guān)系,用于表示一類對象與另一類對象之間有聯(lián)系。 在UML類圖中,用實(shí)線連接有關(guān)聯(lián)的對象所對應(yīng)的類,在使用C#、C+和Java等編程語言實(shí)現(xiàn)關(guān)聯(lián)關(guān)系時(shí),通常將一個(gè)類的對象作為另一個(gè)類的屬性。武漢科技大學(xué)v關(guān)聯(lián)關(guān)系(Association)類圖類圖 Person類與Bicycle類之間存在關(guān)聯(lián)關(guān)系,這意味著在Person類中需要定義一個(gè)Bicycle類型的成員變量。武漢科技大學(xué)類圖類圖public class Person private Bicycle bicycle; /* 騎自行車去上班 */ public void goToWork() bicycle.run(); 武漢科技大學(xué)
18、類圖類圖v聚合關(guān)系(Aggregation) 聚合關(guān)系表示一個(gè)整體與部分的關(guān)系。通常在定義一個(gè)整體類后,再去分析這個(gè)整體類的組成結(jié)構(gòu),從而找出一些成員類,該整體類和成員類之間就形成了聚合關(guān)系。 在聚合關(guān)系中,成員類是整體類的一部分,即成員對象是整體對象的一部分,但是成員對象可以脫離整體對象獨(dú)立存在。在UML中,聚合關(guān)系用帶空心菱形的直線表示。 武漢科技大學(xué)類圖類圖v聚合關(guān)系(Aggregation)武漢科技大學(xué)類圖類圖public class ProjectGroup private Student student; /開始做項(xiàng)目 public void Work() student.star
19、tWorking(); 武漢科技大學(xué)類圖類圖v組合關(guān)系(Composition) 組合關(guān)系也表示類之間整體和部分的關(guān)系,但是組合關(guān)系中部分和整體具有統(tǒng)一的生存期。一旦整體對象不存在,部分對象也將不存在,部分對象與整體對象之間具有同生共死的關(guān)系。 在組合關(guān)系中,成員類是整體類的一部分,而且整體類可以控制成員類的生命周期,即成員類的存在依賴于整體類。在UML中,組合關(guān)系用帶實(shí)心菱形的直線表示。武漢科技大學(xué)類圖類圖v組合關(guān)系(Composition)武漢科技大學(xué)類圖類圖public class Person private Brain brain; public Person() brain = n
20、ew Brain(); 武漢科技大學(xué)類圖類圖v依賴關(guān)系(Dependency) 依賴關(guān)系是一種使用關(guān)系,特定事物的改變有可能會(huì)影響到使用該事物的其他事物,在需要表示一個(gè)事物使用另一個(gè)事物時(shí)使用依賴關(guān)系。大多數(shù)情況下,依賴關(guān)系體現(xiàn)在某個(gè)類的方法使用另一個(gè)類的對象作為參數(shù)。 在UML中,依賴關(guān)系用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。武漢科技大學(xué)類圖類圖v依賴關(guān)系(Dependency)武漢科技大學(xué)類圖類圖public class Bicycle public void Run /* 給輪胎充氣 */ public void expand(Pump pump) pump.blow();
21、武漢科技大學(xué)類圖類圖v泛化關(guān)系(Generalization) 泛化關(guān)系也就是繼承關(guān)系,也稱為“is-a”關(guān)系,泛化關(guān)系用于描述父類與子類之間的關(guān)系,父類又稱作基類或超類,子類又稱作派生類。在UML中,泛化關(guān)系用帶空心三角形的直線來表示。 在代碼實(shí)現(xiàn)時(shí),使用面向?qū)ο蟮睦^承機(jī)制來實(shí)現(xiàn)泛化關(guān)系,如在Java語言中使用extends關(guān)鍵字、在C+ 、C#中使用冒號“:”來實(shí)現(xiàn)。 武漢科技大學(xué)v泛化關(guān)系(Generalization)類圖類圖武漢科技大學(xué)類圖類圖 public class Person protected string name; protected int age; public v
22、oid move() public void say() public class Student : Person private string studentNo; public void study() 武漢科技大學(xué)類圖類圖v實(shí)現(xiàn)關(guān)系(Realization) 接口之間也可以有與類之間關(guān)系類似的繼承關(guān)系和依賴關(guān)系,但是接口和類之間還存在一種實(shí)現(xiàn)關(guān)系,在這種關(guān)系中,類實(shí)現(xiàn)了接口,類中的操作實(shí)現(xiàn)了接口中所聲明的操作。在UML中,類與接口之間的實(shí)現(xiàn)關(guān)系用帶空心三角形的虛線來表示。 武漢科技大學(xué)v實(shí)現(xiàn)關(guān)系(Realization)類圖類圖武漢科技大學(xué)類圖類圖 public interface V
23、ehicle public void move(); public class Ship : Vehicle public void move() Console.WriteLine(輪船航行); public class Car : Vehicle public void move() Console.WriteLine(汽車行駛); 武漢科技大學(xué)單例模式單例模式(Singleton)(Singleton)v模式結(jié)構(gòu) 構(gòu)造函數(shù)私有構(gòu)造函數(shù)私有自行創(chuàng)建單個(gè)實(shí)例自行創(chuàng)建單個(gè)實(shí)例自行向整個(gè)系統(tǒng)提供唯一實(shí)例自行向整個(gè)系統(tǒng)提供唯一實(shí)例保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。武漢科技大學(xué)簡
24、單工廠模式簡單工廠模式(Simple Factory)(Simple Factory)v模式結(jié)構(gòu) 武漢科技大學(xué)簡單工廠模式簡單工廠模式(Simple Factory)(Simple Factory)v模式結(jié)構(gòu) 武漢科技大學(xué)簡單工廠模式簡單工廠模式(Simple Factory)(Simple Factory)用戶要求:添加一個(gè)新運(yùn)算用戶要求:添加一個(gè)新運(yùn)算武漢科技大學(xué)工廠方法模式工廠方法模式(Factory Method)(Factory Method)定義一個(gè)用于創(chuàng)建對象的接口,讓子類決定實(shí)例化哪一個(gè)類。該模式使一個(gè)類的實(shí)例化延遲到其子類。武漢科技大學(xué)抽象工廠模式抽象工廠模式(Abstrac
25、t Factory(Abstract Factory) )提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類。武漢科技大學(xué)原型模式原型模式(Prototype)(Prototype)v模式結(jié)構(gòu) 用原型實(shí)例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。武漢科技大學(xué)原型模式原型模式(Prototype)(Prototype)武漢科技大學(xué)建造者模式建造者模式(Builder Pattern)(Builder Pattern)v模式結(jié)構(gòu) 將一個(gè)復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。武漢科技大學(xué)適配器模式適配器模式(Adapter)(Adapter)
26、v模式結(jié)構(gòu) 將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。本模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。武漢科技大學(xué)適配器模式適配器模式(Adapter)(Adapter)v類適配器和對象適配器假設(shè)我們在軟件開發(fā)中要記錄日志,包括數(shù)據(jù)庫記錄日志DatabaseLog和文本文件記錄日志W(wǎng)riteLog武漢科技大學(xué)適配器模式適配器模式(Adapter)(Adapter)v類適配器和對象適配器開發(fā)過程需要引入一個(gè)新的日志接口,但新的日志接口和以前的不一樣武漢科技大學(xué)適配器模式適配器模式(Adapter)(Adapter)v類適配器武漢科技大學(xué)適配器模式適配器模式(Adapter)(A
27、dapter)v類適配器 public class DatabaseLogAdapter : DatabaseLog, Ilog public void Write() this.WirteLog(); public class FileLogAdapter : FileLog, Ilog public void Write() this.WirteLog(); 武漢科技大學(xué)適配器模式適配器模式(Adapter)(Adapter)v對象適配器武漢科技大學(xué)適配器模式適配器模式(Adapter)(Adapter)v對象適配器 public class LogAdapter : Ilog priva
28、te Log log; public LogAdapter(Log log) this.log = log; public void Write() log.WriteLog(); 武漢科技大學(xué)適配器模式適配器模式(Adapter)(Adapter)上面兩種適配方式,可以看出在類適配方式中,是通過類的繼承來實(shí)現(xiàn)的,同時(shí)也具有接口ILog的所有行為,這些就違背了面向?qū)ο笤O(shè)計(jì)原則中的類的單一職責(zé)原則,而對象適配器則是通過對象組合的方式來實(shí)現(xiàn)的,則符合面向?qū)ο蟮木?,所以推薦用對象適配的模式。武漢科技大學(xué)橋接模式橋接模式(Bridge)(Bridge)v模式結(jié)構(gòu) 武漢科技大學(xué)橋接模式橋接模式(Bri
29、dge)(Bridge)v模式結(jié)構(gòu) 將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。武漢科技大學(xué)組合模式組合模式 (Composite Pattern)(Composite Pattern)v模式結(jié)構(gòu) 將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。武漢科技大學(xué)裝飾裝飾模式模式( (Decorator Pattern)Decorator Pattern)v模式結(jié)構(gòu) 動(dòng)態(tài)地給一個(gè)對象添加一些額外的職責(zé)。武漢科技大學(xué)享元模式享元模式(Flyweight)(Flyweight)v模式結(jié)構(gòu) 武漢科技大學(xué)享元模式享元模式(Flyweight)(Flyweight)v模式結(jié)構(gòu) 運(yùn)用共享技術(shù)有效地
30、支持大量細(xì)粒度的對象。武漢科技大學(xué)外觀模式外觀模式(Facade)(Facade) 一個(gè)合理的設(shè)計(jì)就是為這些子系統(tǒng)創(chuàng)建一個(gè)統(tǒng)一的接口,這個(gè)接口將簡化客戶程序的判斷操作。 引入Facade模式后的類結(jié)構(gòu)圖為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,本模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。武漢科技大學(xué)代理模式代理模式(Proxy)(Proxy)v模式結(jié)構(gòu) 為其他對象提供一種代理以控制對這個(gè)對象的訪問。武漢科技大學(xué)狀態(tài)模式狀態(tài)模式(State)(State)武漢科技大學(xué)狀態(tài)模式狀態(tài)模式(State)(State)v模式結(jié)構(gòu) 允許一個(gè)對象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為。對象看起來似乎修改了它的類。武漢科技大學(xué)模板方法模式模板方法模式(Template Method)(Template Method)v模式結(jié)構(gòu) 定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類中。武漢科技大學(xué)策略模式策略模式(Strategy)(Strategy)武漢科技大學(xué)策略模式策略模式(Strategy)(Strategy)v模式結(jié)構(gòu) 定義一系列的算法,把它們一個(gè)個(gè)封裝起來, 并且使它們可相互替換。武漢科技大學(xué)中介者模式中介者模式(Mediator)(Mediator)v模式結(jié)構(gòu) 外觀外觀模式(模式(Facade)和中介者模式()和中介者模式
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新版合同中車庫的買賣稅費(fèi)解析3篇
- 文具購銷合同3篇
- 新版廣告合同框架協(xié)議3篇
- 教育行業(yè)軟件開發(fā)人員合同樣本3篇
- 安徽教育行業(yè)教師勞動(dòng)合同范本3篇
- 工程基礎(chǔ)建設(shè)合同模板3篇
- 提成協(xié)議范本3篇
- 攔水壩建設(shè)合同規(guī)定3篇
- 改進(jìn)工作態(tài)度嚴(yán)于律己的保證書3篇
- 招標(biāo)文件范本樣本模板3篇
- 表-柴油的理化性質(zhì)及危險(xiǎn)特性
- 婦產(chǎn)科名詞解釋及簡答題
- 法律職業(yè)倫理考試題庫匯總含答案
- 了不起的狐貍爸爸精編版課件
- 品質(zhì)部年終總結(jié)報(bào)告
- 部編版八年級語文下冊《燈籠》評課稿
- 紅棉研學(xué)100題(訓(xùn)練題)
- 論群團(tuán)組織在助推企業(yè)發(fā)展的作用發(fā)揮
- 催化材料智慧樹知到答案章節(jié)測試2023年南開大學(xué)
- 牙隱裂牙隱裂
- 辦公樓裝飾裝修改造工程施工組織設(shè)計(jì)方案
評論
0/150
提交評論