1. 程式人生 > >《設計模式——java版》(一)

《設計模式——java版》(一)

        一、設計模式簡介

        1. 設計模式是一套被反覆使用、多數人知曉、經過分類編目的優秀程式碼設計經驗的總結。使用設計模式是為了重用程式碼,使程式碼更容易理解並保證程式碼的可靠性。

        2. Java設計模式貫徹的原理是:面向介面程式設計、而不是面向實現。其目標原則是:降低耦合性、增強靈活性。

        3. 設計模式的要素是:

                3.1模式名稱

                        模式名稱簡潔的描述了設計模式的問題、解決方案和效果

                3.2問題

                       描述了應該在何時使用設計模式

                3.3環境或初始環境

                       環境說明設計模式的適用範圍,也是模式應用之前的起始條件

                3.4解決方案

                       描述了設計的組成成分,它們之間的相互關係及各自的職責和協作方式

                3.5效果

                       描述了模式應用的效果及使用模式應權衡的問題。

                3.6舉例

                       使用一個或多個示意性的應用來說明特定的真實環境

                3.7 末態環境       

                        模式應用到系統之後的狀態末態環境包括模式帶來的好結果和壞結果 ,以及新狀態中含有的其他問題和可能涉及到的其他有關係的模式。               

                3.8推理

                        推理解釋本模式的步驟、規則,以及此模式作為一個整體是如何以特定方式解決模式的。

                3.9其他有關模式

                        描述在現有的系統中此模式與其他模式的靜態和動態的關係。

                3.10已知的應用

                        是在已有的系統模式中出現和應用的例子。

        4.設計模式分類

                4.1建立型

                         建立型模式是用來建立物件的模式,抽象了例項化的過程,幫助一個系統獨立於其關聯物件的建立、組合和表示方式。建立型的模式都有兩個功能:(1)封裝                    類的所有資訊(2)隱藏類的例項是如何被建立和組織的。外界對於這些物件只知道他們共同的介面,而不清楚其具體的實現細節。                          常見的建立型模式有下列幾種:                         (1)單例模式:一個類只有一個例項,而且自行例項化並向整個系統提供該例項                         (2)工廠方法模式:工廠類成為了抽象類,實際的建立工作將由其具體的子類來完成。強調”單個物件“的變化                         (3)抽象工廠模式:可以向客戶提供一個介面,使得客戶可以在不必指定產品具體型別的情況下,建立多個產品族中的產品物件,強調的是”系列物件“的變化                         (4)建造者模式:把構造物件例項的邏輯移到了類的外部,在類的外部定義了該類的構造邏輯。強調的是產品的構造過程。                         (5)原型模式:同樣對客戶隱藏了物件建立工作,但是原型模式是通過複製一個現有的物件生成新的物件

                4.2結構型

                          結構型模式討論的類和物件的結構,它採用繼承機制來組合介面和實現,或者通過組合一些物件實現新的功能。                           常見的結構型模式有下列幾種:                         (1)代理模式:為其他物件提供一種代理以控制對該物件的訪問                         (2)裝飾模式:動態的給一個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活                         (3)介面卡模式:將一個類的介面變成客戶端所期待的另一個介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作                         (4)組合模式:將物件組合成樹形結構以表示”部分——整體“的層次結構,使得使用者對單個物件和組合物件的使用具有一致性                         (5)橋樑模式:將抽象和實現解耦,使得兩者可以獨立變化                         (6)外觀模式:要求一個子系統的外部與其內部的通訊必須通過一個統一的物件進行。                         (7)亨元模式:是池技術的重要實現方式,使用共享物件可有效地支援大量的細粒度的物件

                4.3行為型

                         行為模式關注的是物件的行為,用來解決物件之間的通訊問題,常見的行為模式有以下幾種:                         (1)模板方法模式:定義一個操作中的演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變一個演算法的結構即可重新定義該演算法的某些特定步驟                         (2)命令模式:是一種高內聚的模式,將一個請求封裝成一個物件,從而使用不同的請求把客戶端引數化,對請求排隊或記錄請求日誌,可以提供命令的撤銷                                                       和恢復功能                         (3)責任鏈模式:使多個物件都有機會處理請求,從而避免了請求的傳送者和接受者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直                                                       到有物件處理它為止                         (4)策略模式:定義一組演算法,將每個演算法都封裝起來,並且使他們之間可以互換                         (5)迭代器模式:提供一種方法訪問一個容器中的各個元素,而又不需要暴露該物件的內部細節                         (6)中介者模式:用一箇中介物件封裝一系列的物件互動,中介者使物件不需要顯示的相互作用,從而使其耦合鬆散,而且可以獨立的改變它們之間的互動                         (7)觀察者模式:也叫釋出訂閱模式,定義物件間的一種一對多的依賴關係,使得每一個物件狀態改變,則所有依賴於它的物件都會得到通知並被自動更新                         (8)備忘錄模式:在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態                         (9)訪問者模式:封裝一些作用於某種資料結構中的各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作                         (10)狀態模式:當一個物件內在狀態改變時允許其改變行為,這個物件看起來像改變了其型別,狀態模式的核心是封裝,狀態的變更引起行為的變更                         (11)直譯器模式:給定一門語言,定義它的文法的一種表示,並定義一個直譯器,該直譯器使用該文法表示來解釋語言中的句子