資源描述:
《面向?qū)ο蟮脑O(shè)計模式學(xué)習(xí)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、23種設(shè)計模式可以在功能設(shè)計,功能的編程實現(xiàn)設(shè)計,程序結(jié)構(gòu)優(yōu)化和性能優(yōu)化等方面給我們以幫助。大部分模式我們在編程的過程中都已經(jīng)無意識的使用過。每一個模式描述了一個在我們周圍不斷重復(fù)發(fā)生的問題,以及該問題的解決方案的核心。這是面向?qū)ο缶幊倘藛T必須掌握的一門內(nèi)功。設(shè)計模式描述了軟件設(shè)計過程中某一類常見問題的一般性的解決方案。面向?qū)ο笤O(shè)計模式描述了面向?qū)ο笤O(shè)計過程中、特定場景下、類與相互通信的對象之間常見的組織關(guān)系。整個設(shè)計模式貫穿一個原理:面對接口編程,而不是面對實現(xiàn).目標(biāo)原則是:降低耦合,增強靈活性.1.1.創(chuàng)建型創(chuàng)建型:負責(zé)對象創(chuàng)建。一、Singleton,單例模式:定義:保證一個
2、類只有一個實例,并提供一個訪問它的全局訪問點。單例模式有延遲初始化和非延遲兩種實現(xiàn)方式。單體模式注意事項:有時在某些情況下,使用Singleton并不能達到Singleton的目的,如有多個Singleton對象同時被不同的類裝入器裝載;在EJB這樣的分布式系統(tǒng)中使用也要注意這種情況,因為EJB是跨服務(wù)器,跨JVM的。Singleton模式看起來簡單,使用方法也很方便,但是真正用好,是非常不容易,需要對Java的類線程內(nèi)存等概念有相當(dāng)?shù)牧私???傊喝绻愕膽?yīng)用基于容器,那么Singleton模式少用或者不用,可以使用相關(guān)替代技術(shù)。二、AbstractFactory,抽象工廠模式又稱
3、為工具箱,產(chǎn)生產(chǎn)品族,但不利于產(chǎn)生新的產(chǎn)品。定義:提供一個接口,讓該接口負責(zé)創(chuàng)建一系列“相關(guān)或者相互依賴的對象”,無需指定它們具體的類。面向?qū)ο蟮脑O(shè)計中,我們使用“new”的方式來創(chuàng)建對象,這樣的問題就是:我們依賴實現(xiàn),不能應(yīng)對“具體實例化類型”的變化。變化點在“對象創(chuàng)建”,因此就封裝“對象創(chuàng)建”,面向接口編程——依賴接口,而非依賴實現(xiàn)。AbstractFactory模式的幾個要點1.如果沒有應(yīng)對“多系列對象創(chuàng)建”的需求變化,則沒有必要使用AbstractFactory模式,這時候使用簡單的靜態(tài)工廠完全可以。2."系列對象"指的是這些對象之間有相互依賴、或作用的關(guān)系,例如游戲開發(fā)場
4、景中“道路”與“房屋”的依賴,“道路”與“地道”的依賴。3.AbstractFactory模式主要在于應(yīng)對“新系列”的需求變動。其缺點在于難以應(yīng)對“新對象”的需求變動。4.AbstractFactory模式經(jīng)常和FactoryMethod模式共同組合來應(yīng)對“對象創(chuàng)建”的需求變化。(FactoryMethod是應(yīng)對對象的變化,)Builder模式和AbstractFactory模式的區(qū)別Builder模式更強調(diào)的是對象部分的“構(gòu)建”這樣一個嚴格的過程,它構(gòu)建的是整個對象的各個部分。它把構(gòu)建穩(wěn)定下來之后,各個部分在變化,最后組合成一個整體的對象。AbstractFactory模式構(gòu)建的
5、是一組系列交互的對象?;ハ嘁蕾嚒⒒ハ嘟换サ膶ο蠛鸵粋€對象的各個部分是有區(qū)別的。三、FactoryMethod,工廠方法模式又稱為多形性工廠;定義:一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類,F(xiàn)actoryMethod使一個類的實例化延遲到了子類。1)抽象工廠角色(AbstractCreator):這是工廠方法模式的核心,它與應(yīng)用程序無關(guān)。是具體工廠角色必須實現(xiàn)的接口或者必須繼承的父類。在java中它由抽象類或者接口來實現(xiàn)。2)具體工廠角色(Creator):它含有和具體業(yè)務(wù)邏輯有關(guān)的代碼。由應(yīng)用程序調(diào)用以創(chuàng)建對應(yīng)的具體產(chǎn)品的對象。3)抽象產(chǎn)品角色(AbstractProduc
6、t):它是具體產(chǎn)品繼承的父類或者是實現(xiàn)的接口。在java中一般有抽象類或者接口來實現(xiàn)。4)具體產(chǎn)品角色(Product):具體工廠角色所創(chuàng)建的對象就是此角色的實例。在java中由具體的類來實現(xiàn)。四、Builder,建造模式建造模式,又叫生成器模式。定義:將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示.Builder模式主要用于“分步驟構(gòu)建一個復(fù)雜的對象”。在這其中“分步驟”是一個穩(wěn)定的算法(即Director),而復(fù)雜對象的各個部分(即ConcreteBuilder)則經(jīng)常變化。變化點在哪里,封裝哪里——Builder模式主要在于應(yīng)對“復(fù)雜對象各個部分”的
7、頻繁需求變動。其缺點在于難以應(yīng)對“分步驟構(gòu)建算法”的需求變動。(例如房屋構(gòu)造如果經(jīng)常改變,那么這個Builder模式也沒有意義了)AbstractFactory模式解決“系列對象”的需求變化,Builder模式解決“對象部分”的需求變化。Builder模式通常和Composite模式組合使用。應(yīng)用舉例:數(shù)據(jù)庫連接池(每一個連接的重用)五、Prototype,原始模型模式定義:用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型來創(chuàng)建新的對象。通過給出一個原型對象來指明所