設計模式復習2010級._第1頁
設計模式復習2010級._第2頁
設計模式復習2010級._第3頁
設計模式復習2010級._第4頁
設計模式復習2010級._第5頁
已閱讀5頁,還剩94頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、LOGO設計模式設計模式(Design Pattern) 張凱 副教授計算機學院 軟件工程系武漢科技大學主要內容主要內容面向對象的七大設計原則1設計模式類型2類與類之間的六大關系323個設計模式4武漢科技大學設計設計模式模式定義定義v設計模式的定義 設計模式(Design Pattern)是一套被反復使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設計經(jīng)驗的總結,使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。武漢科技大學設計設計模式模式定義定義v設計模式的基本要素 設計模式一般有如下幾個基本要素:模式名稱、問題、目的、解決方案、效果、實例代碼和相關設計模式,其中的關鍵元素包括以

2、下四個方面: 模式名稱 (Pattern name) 問題 (Problem) 解決方案 (Solution) 效果 (Consequences) 通過一兩個詞來為模式命名,以便我們更好地理解模式,并方便開發(fā)人員之間的交流,通常模式都是根據(jù)其功能或結構命名。描述了應該在何時使用模式,它包含了設計中存在的問題以及問題存在的原因。描述了一個設計模式的組成部分,以及這些組成部分之間的相互關系,各自的職責和協(xié)作方式,通通常解決方案通過常解決方案通過UML類圖和核心類圖和核心代碼進行描述。代碼進行描述。描述了模式的優(yōu)缺點以及在使用模式時應權衡的問題。武漢科技大學面向對象面向對象的七大的七大設計原則設計原

3、則v1.開放封閉原則OCPv2.單一職責SRPv3.里氏代換LSPv4.依賴倒轉DIPv5.迪米特法則LODv6.接口隔離ISPv7.合成聚合復用原則CARP武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v開放封閉原則OCP 開放封閉原則(Open-Closed Principle,OCP)是面向對象的可復用設計(Object Oriented Design或OOD)的基石。其他設計原則(里氏代換原則、依賴倒轉原則、合成/聚合復用原則、迪米特法則、接口隔離原則)是實現(xiàn)開放封閉原則的手段和工具。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v開放封閉原則OCP 定義:一個軟件

4、實體應當對擴展開放,對修改關閉。即在設計一個模塊的時候,應當使這個模塊可以在不被修改的前提下被擴展。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v開放封閉原則OCP 滿足開放封閉原則的系統(tǒng)的優(yōu)點 a)通過擴展已有的軟件系統(tǒng),可以提供新的行為,以滿足對軟件的新需求,使變化中的軟 件系統(tǒng)有一定的適應性和靈活性。 b)已有的軟件模塊,特別是最重要的抽象層模塊不能再修改,這就使變化中的軟件系統(tǒng)有 一定的穩(wěn)定性和延續(xù)性。 c)這樣的系統(tǒng)同時滿足了可復用性與可維護性。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v開放封閉原則OCP 如何實現(xiàn)開放封閉原則 解決問題關鍵在于抽象化,抽象

5、化是面向對象設計的第一個核心本質。 在面向對象編程中,通過抽象類及接口,規(guī)定了具體類的特征作為抽象層,相對穩(wěn)定,不需更改,從而滿足“對修改關閉”;而從抽象類導出的具體類可以改變系統(tǒng)的行為,從而滿足“對擴展開放”。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v單一職責原則SRP 單一職責原則(Single Responsibility Principle,SRP):一個類,最好只做一件事,只有一個引起它變化的原因。 一個優(yōu)良的系統(tǒng)設計,強調模塊間保持低耦合、高內聚的關系。單一職責,強調的是職責的分離。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v單一職責原則SRP 為什么

6、要把這兩個職責分離到單獨的類中呢? 如果一個類承擔的職責過多,等于把這些職責耦合在了一起。一個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發(fā)生時,設計會遭受到意想不到的破壞。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v里氏代換原則LSP 里氏代換原則(Liskov Substitution Principle, LSP):在一個軟件系統(tǒng)中,子類應該可以替換任何基類能夠出現(xiàn)的地方,并且經(jīng)過替換以后,代碼還能正常工作。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v里氏代換原則LSP 一個軟件實體如果使用的是一個基類的話,那么一定適

7、用于其子類。而且它覺察不出基類對象和子類對象的區(qū)別。也就是說,在軟件里面,把基類都替換成它的子類,程序的行為沒有變化。 反過來的代換不成立,如果一個軟件實體使用的是一個子類的話,那么它不一定適用于基類。 任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v依賴倒轉原則DIP 依賴倒轉原則(dependence inversion principle, DIP): 1高層模塊不應該依賴于低層模塊,二者都應該依賴于抽象。 2抽象不應該依賴于細節(jié),細節(jié)應該依賴于抽象,要針對接口編程,不要針對實現(xiàn)編程。 也就是說應當使用接口和抽象類進行變量類型聲明、參數(shù)

8、類型聲明、方法返回類型說明,以及數(shù)據(jù)類型的轉換等。而不要用具體類。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v依賴倒轉原則DIP武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v依賴倒轉原則DIP武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v依賴倒轉原則DIP 工廠方法模式 模版方法模式 迭代器模式武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v迪米特法則LoD 迪米特法則(Law of Demeter,LoD):又叫做最少知識原則。就是說,一個對象應當對其他對象有盡可能少的了解。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v迪米特法則L

9、oD (1)只與你直接的朋友們通信 (2)不要跟陌生人說話 (3)每一個軟件單位對其他的單位都只有最少的知識,而且局限于那些本單位密切相關的軟件單位。 就是說,如果兩個類不必彼此直接通信,那么這兩個類就不應當發(fā)生直接的相互作用,如果其中的一個類需要調用另一個類的某一個方法的話,可以通過第三者轉發(fā)這個調用。 武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v迪米特法則LoD 這樣,當一個模塊修改時,就會盡量少的影響其他的模塊。擴展會相對容易。 門面(外觀)模式和中介者模式實際上就是迪米特法則的具體應用。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v合成聚合復用原則CARP 合

10、成聚合復用原則(Composite/Aggregate Reuse Principle,CARP):在一個新的對象里面使用一些已有的對象,使之成為新對象的一部分;新的對象通過向這些對象的委派達到復用這些對象的目的。應首先使用合成/聚合,合成/聚合則使系統(tǒng)靈活,其次才考慮繼承,達到復用的目的。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v合成聚合復用原則CARP 優(yōu)先使用對象合成/聚合(UML中的兩個菱形關系),而不是類繼承。盡量使用合成/聚合,不使用類繼承,繼承屬于強耦合的結構。 合成聚合復用好處:優(yōu)先使用對象的合成/聚合將有助于你保持每個類被封裝,并被集中在單個任務上。這樣類和類

11、繼承層次會保持較小規(guī)模,并且不太可能增長為不可控制的龐然大物。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v合成聚合復用原則CARP 將抽象部分與它的實現(xiàn)部分分離,使他們都可以獨立地變化。 橋接模式就是把抽象和實現(xiàn)獨立出來,讓它們各自變化。這就使得每種實現(xiàn)的變化不會影響其他實現(xiàn),從而達到應對變化的目的。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v接口隔離原則ISP 接口隔離原則(interface separate principle,ISP):接口隔離原則:使用多個專門的接口比使用單一的總接口要好。也就是說,一個類對另外一個類的依賴性應當是建立在最小的接口上。 武漢

12、科技大學面向對象面向對象的七大的七大設計原則設計原則v接口隔離原則ISP 接口往往有兩種不同的含義:一種是指一個類型所具有的方法特征的集合,僅僅是一種邏輯上的抽象; 另外一種是指某種語言具體的接口定義,有嚴格的定義和結構。比如c# 語言里面的Interface結構。對于這兩種不同的含義,ISP的表達方式以及含義都有所不同。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v接口隔離原則ISP 當我們把接口理解成一個類所提供的所有方法的特征集合的時候,這就是一種邏輯上的概念。接口的劃分就直接帶來類型的劃分。這里,我們可以把接口理解成角色,一個接口就只是代表一個角色,每個角色都有它特定的一個

13、接口,這里的這個原則可 以叫做角色隔離原則。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v接口隔離原則ISP武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v接口隔離原則ISP 如果把接口理解成狹義的特定語言的接口,那么ISP表達的意思是說,對不同的客戶端,同一個角色提供寬窄不同的接口,也就是定制服務,個性化服務。就是僅僅提供客戶端需要的行為,客戶端不需要的行為則隱藏起來。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v接口隔離原則ISP 應當為客戶端提供盡可能小的單獨的接口,而不要提供大的總接口。 這也是對軟件實體之間通信的限制。但它限制的只是通信的寬度,就是說

14、通信要盡可能的窄。武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v接口隔離原則ISP武漢科技大學面向對象面向對象的七大的七大設計原則設計原則v接口隔離原則ISP武漢科技大學設計模式設計模式分類分類v設計模式的分類 根據(jù)其目的(模式是用來做什么的)可分為創(chuàng)建型(Creational),結構型(Structural)和行為型(Behavioral)三種: 創(chuàng)建型模式主要用于創(chuàng)建對象。 結構型模式主要用于處理類或對象的組合。 行為型模式主要用于描述對類或對象怎樣交互和怎樣分配職責。武漢科技大學設計模式設計模式分類分類v創(chuàng)建型模式 抽象工廠模式(Abstract Factory) 建造者模式

15、(Builder) 工廠方法模式(Factory Method) 原型模式(Prototype) 單例模式(Singleton) 武漢科技大學設計模式設計模式分類分類v結構型模式 適配器模式(Adapter) 橋接模式(Bridge) 組合模式(Composite) 裝飾模式(Decorator) 外觀模式(Facade) 享元模式(Flyweight) 代理模式(Proxy)Attack?要我干啥嘛?要我干啥嘛?武漢科技大學設計模式設計模式分類分類v行為型模式 職責鏈模式(Chain of Responsibility) 命令模式(Command) 迭代器模式(Iterator) 中介者模式

16、(Mediator) 備忘錄模式(Memento) 觀察者模式(Observer) 狀態(tài)模式(State) 策略模式(Strategy) 模板方法模式(Template Method) 訪問者模式(Visitor) 解釋器模式(Interpreter)武漢科技大學類圖類圖vUML六大關系 關聯(lián)關系(Association) 聚合關系(Aggregation) 組合關系(Composition) 依賴關系(Dependency) 實現(xiàn)(Realization) 泛化(Generalization)武漢科技大學類圖類圖v關聯(lián)關系(Association) 關聯(lián)關系是類與類之間最常用的一種關系,它是

17、一種結構化關系,用于表示一類對象與另一類對象之間有聯(lián)系。 在UML類圖中,用實線連接有關聯(lián)的對象所對應的類,在使用C#、C+和Java等編程語言實現(xiàn)關聯(lián)關系時,通常將一個類的對象作為另一個類的屬性。武漢科技大學v關聯(lián)關系(Association)類圖類圖 Person類與Bicycle類之間存在關聯(lián)關系,這意味著在Person類中需要定義一個Bicycle類型的成員變量。武漢科技大學類圖類圖public class Person private Bicycle bicycle; /* 騎自行車去上班 */ public void goToWork() bicycle.run(); 武漢科技大學

18、類圖類圖v聚合關系(Aggregation) 聚合關系表示一個整體與部分的關系。通常在定義一個整體類后,再去分析這個整體類的組成結構,從而找出一些成員類,該整體類和成員類之間就形成了聚合關系。 在聚合關系中,成員類是整體類的一部分,即成員對象是整體對象的一部分,但是成員對象可以脫離整體對象獨立存在。在UML中,聚合關系用帶空心菱形的直線表示。 武漢科技大學類圖類圖v聚合關系(Aggregation)武漢科技大學類圖類圖public class ProjectGroup private Student student; /開始做項目 public void Work() student.star

19、tWorking(); 武漢科技大學類圖類圖v組合關系(Composition) 組合關系也表示類之間整體和部分的關系,但是組合關系中部分和整體具有統(tǒng)一的生存期。一旦整體對象不存在,部分對象也將不存在,部分對象與整體對象之間具有同生共死的關系。 在組合關系中,成員類是整體類的一部分,而且整體類可以控制成員類的生命周期,即成員類的存在依賴于整體類。在UML中,組合關系用帶實心菱形的直線表示。武漢科技大學類圖類圖v組合關系(Composition)武漢科技大學類圖類圖public class Person private Brain brain; public Person() brain = n

20、ew Brain(); 武漢科技大學類圖類圖v依賴關系(Dependency) 依賴關系是一種使用關系,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關系。大多數(shù)情況下,依賴關系體現(xiàn)在某個類的方法使用另一個類的對象作為參數(shù)。 在UML中,依賴關系用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。武漢科技大學類圖類圖v依賴關系(Dependency)武漢科技大學類圖類圖public class Bicycle public void Run /* 給輪胎充氣 */ public void expand(Pump pump) pump.blow();

21、武漢科技大學類圖類圖v泛化關系(Generalization) 泛化關系也就是繼承關系,也稱為“is-a”關系,泛化關系用于描述父類與子類之間的關系,父類又稱作基類或超類,子類又稱作派生類。在UML中,泛化關系用帶空心三角形的直線來表示。 在代碼實現(xiàn)時,使用面向對象的繼承機制來實現(xiàn)泛化關系,如在Java語言中使用extends關鍵字、在C+ 、C#中使用冒號“:”來實現(xiàn)。 武漢科技大學v泛化關系(Generalization)類圖類圖武漢科技大學類圖類圖 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() 武漢科技大學類圖類圖v實現(xiàn)關系(Realization) 接口之間也可以有與類之間關系類似的繼承關系和依賴關系,但是接口和類之間還存在一種實現(xiàn)關系,在這種關系中,類實現(xiàn)了接口,類中的操作實現(xiàn)了接口中所聲明的操作。在UML中,類與接口之間的實現(xiàn)關系用帶空心三角形的虛線來表示。 武漢科技大學v實現(xiàn)關系(Realization)類圖類圖武漢科技大學類圖類圖 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(汽車行駛); 武漢科技大學單例模式單例模式(Singleton)(Singleton)v模式結構 構造函數(shù)私有構造函數(shù)私有自行創(chuàng)建單個實例自行創(chuàng)建單個實例自行向整個系統(tǒng)提供唯一實例自行向整個系統(tǒng)提供唯一實例保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。武漢科技大學簡

24、單工廠模式簡單工廠模式(Simple Factory)(Simple Factory)v模式結構 武漢科技大學簡單工廠模式簡單工廠模式(Simple Factory)(Simple Factory)v模式結構 武漢科技大學簡單工廠模式簡單工廠模式(Simple Factory)(Simple Factory)用戶要求:添加一個新運算用戶要求:添加一個新運算武漢科技大學工廠方法模式工廠方法模式(Factory Method)(Factory Method)定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。該模式使一個類的實例化延遲到其子類。武漢科技大學抽象工廠模式抽象工廠模式(Abstrac

25、t Factory(Abstract Factory) )提供一個創(chuàng)建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。武漢科技大學原型模式原型模式(Prototype)(Prototype)v模式結構 用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。武漢科技大學原型模式原型模式(Prototype)(Prototype)武漢科技大學建造者模式建造者模式(Builder Pattern)(Builder Pattern)v模式結構 將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示。武漢科技大學適配器模式適配器模式(Adapter)(Adapter)

26、v模式結構 將一個類的接口轉換成客戶希望的另外一個接口。本模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。武漢科技大學適配器模式適配器模式(Adapter)(Adapter)v類適配器和對象適配器假設我們在軟件開發(fā)中要記錄日志,包括數(shù)據(jù)庫記錄日志DatabaseLog和文本文件記錄日志W(wǎng)riteLog武漢科技大學適配器模式適配器模式(Adapter)(Adapter)v類適配器和對象適配器開發(fā)過程需要引入一個新的日志接口,但新的日志接口和以前的不一樣武漢科技大學適配器模式適配器模式(Adapter)(Adapter)v類適配器武漢科技大學適配器模式適配器模式(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(); 武漢科技大學適配器模式適配器模式(Adapter)(Adapter)v對象適配器武漢科技大學適配器模式適配器模式(Adapter)(Adapter)v對象適配器 public class LogAdapter : Ilog priva

28、te Log log; public LogAdapter(Log log) this.log = log; public void Write() log.WriteLog(); 武漢科技大學適配器模式適配器模式(Adapter)(Adapter)上面兩種適配方式,可以看出在類適配方式中,是通過類的繼承來實現(xiàn)的,同時也具有接口ILog的所有行為,這些就違背了面向對象設計原則中的類的單一職責原則,而對象適配器則是通過對象組合的方式來實現(xiàn)的,則符合面向對象的精神,所以推薦用對象適配的模式。武漢科技大學橋接模式橋接模式(Bridge)(Bridge)v模式結構 武漢科技大學橋接模式橋接模式(Bri

29、dge)(Bridge)v模式結構 將抽象部分與它的實現(xiàn)部分分離,使它們都可以獨立地變化。武漢科技大學組合模式組合模式 (Composite Pattern)(Composite Pattern)v模式結構 將對象組合成樹形結構以表示“部分-整體”的層次結構。武漢科技大學裝飾裝飾模式模式( (Decorator Pattern)Decorator Pattern)v模式結構 動態(tài)地給一個對象添加一些額外的職責。武漢科技大學享元模式享元模式(Flyweight)(Flyweight)v模式結構 武漢科技大學享元模式享元模式(Flyweight)(Flyweight)v模式結構 運用共享技術有效地

30、支持大量細粒度的對象。武漢科技大學外觀模式外觀模式(Facade)(Facade) 一個合理的設計就是為這些子系統(tǒng)創(chuàng)建一個統(tǒng)一的接口,這個接口將簡化客戶程序的判斷操作。 引入Facade模式后的類結構圖為子系統(tǒng)中的一組接口提供一個一致的界面,本模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。武漢科技大學代理模式代理模式(Proxy)(Proxy)v模式結構 為其他對象提供一種代理以控制對這個對象的訪問。武漢科技大學狀態(tài)模式狀態(tài)模式(State)(State)武漢科技大學狀態(tài)模式狀態(tài)模式(State)(State)v模式結構 允許一個對象在其內部狀態(tài)改變時改變它的行為。對象看起來似乎修改了它的類。武漢科技大學模板方法模式模板方法模式(Template Method)(Template Method)v模式結構 定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。武漢科技大學策略模式策略模式(Strategy)(Strategy)武漢科技大學策略模式策略模式(Strategy)(Strategy)v模式結構 定義一系列的算法,把它們一個個封裝起來, 并且使它們可相互替換。武漢科技大學中介者模式中介者模式(Mediator)(Mediator)v模式結構 外觀外觀模式(模式(Facade)和中介者模式()和中介者模式

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論