設計模式目標,原則

軟件設計模式

一、設計目標:

⑴、軟件設計目標:正確性、健壯性、靈活性、可重用性、高效性

1、正確性:也就是滿足應用程序的需求。

2、健壯性:是指軟件對於規範要求以外的輸入情況的處理能力。也就是說,在異常情況下,軟件能夠正常運行的能力。

3、靈活性:就是可以允許代碼修改平穩地發生,而不會波及到很多其他的模塊。

4、可重用性:也就是重複使用的意思。

5、高效性:一般指兩個方面,一是執行效率,二是存儲效率。

⑵、良好設計的特徵:可擴展性、靈活性、可插入性

1、可擴展性:新功能容易加入,而且不會影響已有功能,即不“僵硬”

2、靈活性:修改一個地方,不會影響其他,即不“脆弱”

3、可插入性:用一個容易替換另一個類,只要它們實現相同接口即可,即低“黏度”

⑶、面向對象的三大特徵:繼承性、封裝性、多態性

1、繼承性:特殊類的對象具有其一般類的對象的全部屬性和行爲,即稱特殊類對一般類的繼承。

2、封裝性:把對象的屬性和行爲組合成爲一個獨立的單位或部件,並儘可能隱蔽對象的內

部細節,而只保留必要的對外接口,使之與外部發生聯繫。

3、多態性:是指不同類型的對象接收相同的消息時,產生不同的行爲

二、設計原則:

⑴、軟件設計原則:單一職責原則、開閉原則、里氏替換原則、接口

分離原則、依賴倒置原則

1、單一職責原則(SRP):一個類應該有且只有一個改變的理由,它要求“一個設計元素只做一件事”。

2、開閉原則(OCP):不修改原有類就能擴展一個類的行爲。也就是說,一個軟件實體應當對擴展開放,對修改關閉。

3、里氏替換原則(LSP):子類能替換其超類(is-a 關係),也就是說子類型(subtype)必須能替換其基類型(base type)。

4、接口分離原則(ISP):使用多個專門的接口比使用單一的總接口更好;換言之,從一個客戶類的角度來講:一個類對另外一個類的依賴性應當是建立在最小的接口之上的;不應該強迫客戶程序依賴於它們不用的接口

5、依賴倒置原則(DIP):要依賴於抽象,不要依賴於具體:也就是說,抽象不應當依賴

於細節,細節應當依賴於抽象;要針對接口編程,不要針對實現編程。

三、設計模式:

⑴、軟件設計模式的定義:

1、模式:是做事的一種方法,也即是實現某個目標的途徑,或者技術。

2、設計模式:描述了軟件設計過程中某一類常見問題的一般性的解決方案

3、設計模式:是類的聯合體以及與之相伴的算法,這些算法能夠實現共同的設計目標。設計模式表達了一種思想而不僅僅是固定的類聯合體,相伴的算法表示模式的基本操作。

⑵、面向對象設計模式的定義:

1、面向對象設計模式:描述了面向對象設計過程中,特定場景下,類與相互通信的對象之間常見的組織關係。

2、面向對象設計模式描述的是軟件設計,因此它是獨立於編程語言的,但是面向對象設計模式的最終實現仍然要使用面向對象編程語言來表達

⑶、設計模式的分類:

①、依據設計模式的行爲方式,也即其目的,將設計模式分爲三種類型:創建型

模式、結構型模式、行爲型模式:

a、創建型模式:以靈活的方式創建對象的集合,如:工廠模式、抽象工廠模式、建造者模式、單件模式、原型模式等。

B、結構型模式:代表相關對象的集合,如:適配器模式、裝飾模式、橋接模式、享元模式、外觀模式、代理模式、組合模式。

C、行爲型模式:在對象集合中捕獲行爲,如:模板方法模式、觀察者模式、迭代子模式、

責任鏈模式、備忘錄模式、命令模式、狀態模式、訪問者模式、中介者模式、策略模式。

②、根據設計意圖可分爲五類:接口型設計模式、責任型設計模式、構造型設計

模式、操作型設計模式、擴展型設計模式。

⑷、設計模式的主要職責(意圖):

1、簡單工廠設計模式:一個工廠類處於對產品類實例化的中心位置上,它知道每一個產品,它決定哪一個產品類應當被實例化。這個模式的優點是允許客戶端相對獨立於產品創建

的過程,並且在系統引入新產品的時候無需修改客戶端,也就是說,它在某種程度上支

持“開-閉”原則。

2、工廠方法設計模式:是定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類中。在軟件系統中,經常面臨着“某個對象”的創建工作;由於需求的變化,這個對象

經常面臨着劇烈的變化,但是它卻擁有比較穩定的接口。

3抽象工廠設計模式:提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們

具體的淚。抽象工廠模式主要是用於創建一個產品族,而不是一個一個具體的產品。

4建造者模式:將產品的內部表象與產品的生成過程分割開來,從而可以使一個建造過程

生成具有不同的內部表象的產品對象。也就是說,它將一個複雜的構建與其表示相分離,

使得同樣的構建過程可以創建不同的表示。

5單件模式:一個類僅有一個實例,並提供一個訪問它的全局訪問點。也就是說,單件模

式的要點是:某個類只能有一個實例;它必須自行創建這個實例;它必須自行向整個系

統提供這個實例。

6原型模式:通過給出一個原型對象來指明所要創建的對象的類型,然後用複製這個原型

對象的辦法創建出更多類型的對象。

7適配器設計模式:將接口不同而功能相同或相近的兩個接口加以轉換。

8裝飾模式:裝飾模式以對客戶透明的方式動態地給一個對象附加上更多的責任。換言之,

客戶端並不會覺得對象在裝飾前和裝飾後有什麼不同。裝飾模式可以在不使用創造更多

子類的情況下,將對象的功能加以擴展。

9橋接模式:將抽象化與實現化脫耦,使得二者可以獨立地變化。實現系統可能有多角度

分類,每一種分類都有可能變化,那麼就把這種多角度分離出來讓它們獨立變化,減少

它們之間的耦合。

10組合模式:當需求中是體現部分與整體層次的結構時,以及你希望用戶可以忽略組合對

象與單個對象的不同,統一地使用組合結構中的所有對象時,就應該考慮到組合模式了。

11模板方法模式:當我們要完成某一細節層次一致的一個過程或一系列步驟,但其個別步

驟在更詳細的層次上的實現可能不同時,我們通常考慮用模板方法模式來處理。

12觀察者模式:定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對

象。這個主題對象在狀態上發生變化時,會通知所有觀察者對象,使它們能夠自動更新

自己。

13迭代子模式:通過設計一個迭代器,這個迭代器提供一種方法,可以順序訪問聚合對象

中的各個元素,但又不暴露該對象的內部表示。

14責任鏈模式:爲解除請求者和接受者之間的耦合,而使多個對象都有機會處理這個請求。

將這些對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有一個對象處理它。

15備忘錄模式:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外保

存這個狀態。這樣以後就可以將該對象恢復到原先保存的狀態。

16命令模式:目的是解除命令發出者和接收者之間的耦合關係,是二者相對獨立,有利於

程序的並行開發和代碼的維護。命令模式的核心思想是將請求封裝一個對象,將其作爲

命令發起者和接受者的中介,而抽象出來的命令對象又使我們能夠對一些列請求進行某

些操作。

17狀態模式:核心思想是允許一個對象在它的內部狀態改變時改變它的行爲,即不同的狀

態對應不同的行爲,這需要將狀態單獨抽象爲一個對象。

⑸、設計模式結構圖:

這裏不詳細敘述,參見幫助手冊----Java設計模式-類圖大全(.chm)精解、UML類圖解析

http://download.csdn.net/detail/ljheee/9473393

推薦文檔:

http://download.csdn.net/detail/ljheee/9473392

http://download.csdn.net/detail/ljheee/9473388
————————————————
版權聲明:本文爲CSDN博主「ljheee」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/ljheee/article/details/51519091

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章