系統(tǒng)架構(gòu)設(shè)計師23種設(shè)計模式應(yīng)用_第1頁
系統(tǒng)架構(gòu)設(shè)計師23種設(shè)計模式應(yīng)用_第2頁
系統(tǒng)架構(gòu)設(shè)計師23種設(shè)計模式應(yīng)用_第3頁
系統(tǒng)架構(gòu)設(shè)計師23種設(shè)計模式應(yīng)用_第4頁
系統(tǒng)架構(gòu)設(shè)計師23種設(shè)計模式應(yīng)用_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

系統(tǒng)架構(gòu)設(shè)計師23種設(shè)計模式應(yīng)用

目錄

1、前言.......................................................................8

2、學(xué)習(xí)理念...................................................................9

3、設(shè)計原則..................................................................11

4、創(chuàng)建型模式................................................................12

4.1、單例(Singleton)模式................................................13

4.1.1、定義與特點......................................................13

4.1.2、優(yōu)點和缺點......................................................14

4.1.3、應(yīng)用場景........................................................15

4.1.4、結(jié)構(gòu)與實現(xiàn)......................................................15

4.2、原型(Prototype)模式................................................17

421、定義與特點......................................................17

4.2.2、優(yōu)點和缺點......................................................17

423、應(yīng)用場景........................................................18

424、結(jié)構(gòu)與實現(xiàn)......................................................18

4.3、建造者(Builder)模式.................................................19

4.3.1、定義與特點......................................................19

4.3.2、優(yōu)點和缺點......................................................20

4.3.3、應(yīng)用場景........................................................20

4.3.4、結(jié)構(gòu)與實現(xiàn)......................................................21

4.4、工廠方法(FactoryMethod)模式......................................23

4.4.1、定義與特點......................................................23

4.4.2、優(yōu)點和缺點......................................................23

4.4.3、應(yīng)用場景........................................................24

4.4.4、結(jié)構(gòu)與實現(xiàn)......................................................24

4.5、抽象工廠(AbstractFactory)模式......................................26

4.5.1、定義與特點......................................................26

4.5.2、優(yōu)點和缺點抽象工廠模式除了具有工廠方法模式的優(yōu)點外,其他主要優(yōu)點

如下。.................................................................26

4.5.3、應(yīng)用場景........................................................27

4.5.4、結(jié)構(gòu)與實現(xiàn)......................................................27

5、結(jié)構(gòu)型模式..................................................................29

5.1、代理(Proxy)模式....................................................30

5.1.1、定義與特點......................................................30

5.1.2、優(yōu)點和缺點......................................................30

5.1.3、應(yīng)用場景........................................................31

5.1.4、結(jié)構(gòu)與實現(xiàn)......................................................31

5.2、適配器(Adapter)模式................................................33

5.2.1、定義與特點......................................................33

522、優(yōu)點和缺點......................................................33

5.2.3、應(yīng)用場景........................................................34

5.2.4、結(jié)構(gòu)與實現(xiàn)......................................................34

5.3、橋接(Bridge)模式...................................................35

5.3.1、定義與特點......................................................35

5.3.2、優(yōu)點和缺點......................................................35

5.3.3、應(yīng)用場景........................................................36

5.3.4、結(jié)構(gòu)與實現(xiàn)......................................................36

5.4、裝飾(Decorator)模式................................................37

5.4.1、定義與特點......................................................37

5.4.2、優(yōu)點和缺點......................................................38

5.4.3、應(yīng)用場景........................................................38

5.4.4、結(jié)構(gòu)與實現(xiàn)......................................................38

5.5、外觀(Facade)模式...................................................40

5.5.1、定義與特點......................................................40

5.5.2、優(yōu)點和缺點......................................................40

5.5.3、應(yīng)用場景........................................................40

5.5.4、結(jié)構(gòu)與實現(xiàn)......................................................41

5.6、享元(Flyweight)模式................................................42

561、定義與特點......................................................42

5.6.2、優(yōu)點和缺點......................................................42

5.6.3、應(yīng)用場景........................................................42

5.6.4、結(jié)構(gòu)與實現(xiàn)......................................................43

5.7、組合(Composite)觸...............................................44

571、定義與特點......................................................44

5.7.2、優(yōu)點和缺點......................................................45

5.7.3、應(yīng)用場景........................................................45

574、結(jié)構(gòu)與實現(xiàn)......................................................45

6、行為型模式..................................................................47

6.1、模板方法(TemplateMethod)..........................................................................48

6.1.1、定義與特點......................................................48

6.1.2、優(yōu)點和缺點......................................................49

6.1.3、應(yīng)用場景........................................................49

6.1.4、結(jié)構(gòu)與實現(xiàn)......................................................49

6.2、策略(Strategy)模式.................................................51

6.2.1、定義與特點......................................................51

622、優(yōu)點和缺點......................................................51

623、應(yīng)用場景........................................................51

6.2.4、結(jié)構(gòu)與實現(xiàn)......................................................52

6.3、命令(Command)模式................................................54

6.3.1、定義與特點......................................................54

6.3.2、優(yōu)點和缺點......................................................54

6.3.3、應(yīng)用場景........................................................55

6.3.4、結(jié)構(gòu)與實現(xiàn)......................................................55

6.4、職責(zé)鏈(ChainofResponsibility)模式.................................57

6.4.1、定義與特點......................................................57

6.4.2、優(yōu)點和缺點......................................................57

6.4.3、應(yīng)用場景........................................................58

6.4.4、結(jié)構(gòu)與實現(xiàn)......................................................58

6.5、觀察者(Observer)模式...............................................59

6.5.1、定義與特點......................................................59

6.5.2、優(yōu)點和缺點......................................................60

6.5.3、應(yīng)用場景........................................................60

654、結(jié)構(gòu)與實現(xiàn)......................................................61

6.6、迭代器(Iterator)模式................................................62

6.6.1、定義與特點......................................................62

6.6.2、優(yōu)點和缺點......................................................63

6.6.3、應(yīng)用場景........................................................63

6.6.4、結(jié)構(gòu)與實現(xiàn)......................................................63

6.7、狀態(tài)(State)模式.....................................................65

6.7.1、定義與特點......................................................65

6.7.2、優(yōu)點和缺點......................................................66

673、應(yīng)用場景........................................................66

6.7.4、結(jié)構(gòu)與實現(xiàn)......................................................66

6.8、備忘錄(Memento)模式..............................................67

6.8.1、定義與特點......................................................67

6.8.2、優(yōu)點和缺點......................................................68

6.8.3、應(yīng)用場景........................................................68

6.8.4、結(jié)構(gòu)與實現(xiàn)......................................................68

6.9、中介者(Mediator)模式..............................................70

6.9.1、定義與特點......................................................70

6.9.2、優(yōu)點和缺點.....................................................70

6.9.3、應(yīng)用場景.......................................................70

6.9.4、結(jié)構(gòu)與實現(xiàn).....................................................71

6.10、訪問者(Visitor)模式................................................72

6.10.1、定義與特點.....................................................72

6.10.2、優(yōu)點和缺點.....................................................72

6.10.3、應(yīng)用場景.......................................................73

6.10.4、結(jié)構(gòu)與實現(xiàn).....................................................73

6.11、解釋器(Interpreter)模式...........................................75

6.11.1、定義與特點.....................................................75

6.11.2、優(yōu)點和缺點....................................................75

6.11.3、應(yīng)用場景.......................................................75

6.11.4、結(jié)構(gòu)與實現(xiàn).....................................................76

1、前言

軟件設(shè)計模式(SoftwareDesignPattern),又稱設(shè)計模式,是一套被反復(fù)使用、多數(shù)

人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié)。它描述了在軟件設(shè)計過程中的一些不斷

重復(fù)發(fā)生的問題,以及該問題的解決方案。也就是說,它是解決特定問題的一系列套路,是

前輩們的代碼設(shè)計經(jīng)驗的總結(jié),具有一定的普遍性,可以反復(fù)使用。其目的是為了提高代碼

的可重用性、代碼的可讀性和代碼的可靠性。

軟件設(shè)計模式使人們可以更加簡單方便地復(fù)用成功的設(shè)計和體系結(jié)構(gòu),它通常包含以

下幾個基本要素:模式名稱、別名、動機(jī)、問題、解決方案、效果、結(jié)構(gòu)、模式角色、合

作關(guān)系、實現(xiàn)方法、適用性、已知應(yīng)用、例程、模式擴(kuò)展和相關(guān)模式等,其中最關(guān)鍵的元

素包括以下4個主要部分。

1.模式名稱

每一個模式都有自己的名字,通常用一兩個詞來描述,可以根據(jù)模式的問題、特點、解

決方案、功能和效果來命名。模式名稱(PattemName)有助于我們理解和記憶該模式,也

方便我們來討論自己的設(shè)計。

2.問題

問題(Problem)描述了該模式的應(yīng)用環(huán)境,即何時使用該模式。它解釋了設(shè)計問題和

問題存在的前因后果,以及必須滿足的一系列先決條件。

3.解決方案

模式問題的解決方案(Solution)包括設(shè)計的組成成分、它們之間的相互關(guān)系及各自的

職責(zé)和協(xié)作方式。因為模式就像一個模板,可應(yīng)用于多種不同場合,所以解決方案并不描述

一個特定而具體的設(shè)計或?qū)崿F(xiàn),而是提供設(shè)計問題的抽象描述和怎樣月一個具有一般意義的

元素組合(類或?qū)ο蟮慕M合)來解決這個問題。

4.效果

描述了模式的應(yīng)用效果以及使用該模式應(yīng)該權(quán)衡的問題,即模式的優(yōu)缺點。主要是對時

間和空間的衡量,以及該模式對系統(tǒng)的靈活性、擴(kuò)充性、可移植性的影響,也考慮其實現(xiàn)問

題。顯式地列出這些效果(Consequence)對理解和評價這些模式有很大的幫助。

根據(jù)模式是用來完成什么工作來劃分,這種方式可分為創(chuàng)建型模式、結(jié)構(gòu)型模式和行

為型模式3種。

創(chuàng)建型模式:用于描述“怎樣創(chuàng)建對象",它的主要特點是"將對象的創(chuàng)建與使用分

離”。GoF中提供了單例、原型、工廠方法、抽象工廠、建造者等5種創(chuàng)建型模式。

結(jié)構(gòu)型模式:用于描述如何將類或?qū)ο蟀茨撤N布局組成更大的結(jié)構(gòu),GoF中提供了代

理、適配器、橋接、裝飾、外觀、享元、組合等7種結(jié)構(gòu)型模式。

行為型模式:用于描述類或?qū)ο笾g怎樣相互協(xié)作共同完成單個對象都無法單獨完成

的任務(wù),以及怎樣分配職責(zé)。GoF中提供了模板方法、策略、命令、職責(zé)鏈、狀態(tài)、觀察

者、中介者、迭代器、訪問者、備忘錄、解釋器等11種行為型模式。

2、學(xué)習(xí)理念

設(shè)計模式不是為每個人準(zhǔn)備的,而是基于業(yè)務(wù)來選擇設(shè)計模式,需要時就能想到它。

要明白一點,技術(shù)永遠(yuǎn)為業(yè)務(wù)服務(wù),技術(shù)只是滿足業(yè)務(wù)需要的一個工具。我們需要掌握每

種設(shè)計模式的應(yīng)用場景、特征、優(yōu)缺點,以及每種設(shè)計模式的關(guān)聯(lián)關(guān)系,這樣就能夠很好

地滿足日常業(yè)務(wù)的需要。

許多設(shè)計模式的功能類似,界限不是特別清楚。設(shè)計模式不是為了特定場景而生的,

而是為了讓大家可以更好和更快地開發(fā)。設(shè)計模式只是實現(xiàn)了七大設(shè)計原則的具體方式,

套用太多設(shè)計模式只會陷入模式套路陷阱,最后代碼寫的凌舌杯堪。

在實際工作中很少會規(guī)定必須使用哪種設(shè)計模式,這樣只會限制別人。不能為了使用設(shè)

計模式而去做架構(gòu),而是有了做架構(gòu)的需求后,發(fā)現(xiàn)它符合某一類設(shè)計模式的結(jié)構(gòu),在將

兩者結(jié)合。

設(shè)計模式要活學(xué)活用,不要生股硬套。想要游刃有余地使用設(shè)計模式,需要打下牢固的

程序設(shè)計語言基礎(chǔ)、夯實自己的編程思想、積累大量的時間經(jīng)驗、提高開發(fā)能力。目的都

是讓程序低耦合,高復(fù)用,高內(nèi)聚,易擴(kuò)展,易維護(hù)。

1.需求驅(qū)動

不僅僅是功能性需求,需求驅(qū)動還包括性能和運(yùn)行時的需求,如軟件的可維護(hù)性和可

復(fù)用性等方面。設(shè)計模式是針對軟件設(shè)計的,而軟件設(shè)計是針對需求的,一定不要為了使

用設(shè)計模式而使用設(shè)計模式,否則可能會使設(shè)計變得復(fù)雜,使軟件難以調(diào)試和維護(hù)。

2.分析成功的模式應(yīng)用項目

對現(xiàn)有的應(yīng)用實例進(jìn)行分析是一個很好的學(xué)習(xí)途徑,應(yīng)當(dāng)注意學(xué)習(xí)已有的項目,而不

僅是學(xué)習(xí)設(shè)計模式如何實現(xiàn),更重要的是注意在什么場合使用設(shè)計模式。

3.充分了解所使用的開發(fā)平臺

設(shè)計模式大部分都是針對面向?qū)ο蟮能浖O(shè)計,因此在理論上適合任何面向?qū)ο蟮恼Z

言,但隨著技術(shù)的發(fā)展和編程環(huán)境的改善,設(shè)計模式的實現(xiàn)方式會有很大的差別。在一些

平臺下,某些設(shè)計模式是自然實現(xiàn)的。

不僅指編程語言,平臺還包括平臺引入的技術(shù)。例如,JavaEE引入了反射機(jī)制和依賴

注入,這些技術(shù)的使用使設(shè)計模式的實現(xiàn)方式產(chǎn)生了改變。

4.在編程中領(lǐng)悟模式

軟件開發(fā)是一項實踐工作,最直接的方法就是編程。沒有從來不下棋卻熟悉定式的圍

棋高手,也沒有不會編程就能成為架構(gòu)設(shè)計師的先例。掌握設(shè)計模式是水到渠成的事情,

除了理論只是和實踐積累,可能會"漸悟"或者"頓悟"。

5.避免設(shè)計過度

設(shè)計模式解決的是設(shè)計不足的問題,但同時也要避免設(shè)計過度。一定要牢記簡潔原

則,要知道設(shè)計模式是為了使設(shè)計簡單,而不是更復(fù)雜。如果引入設(shè)計模式使得設(shè)計變得

復(fù)雜,只能說我們把簡單問題復(fù)雜化了,問題本身不需要設(shè)計模式。

這里需要把握的是需求變化的程度,一定要區(qū)分需求的穩(wěn)定部分和可變部分。一個軟

件必然有穩(wěn)定部分,這個部分就是核心業(yè)務(wù)邏輯。如果核心業(yè)務(wù)邏輯發(fā)生變化,軟件就沒

有存在的必要,核心業(yè)務(wù)邏輯是我們需要固化的。對于可變的部分,需要判斷可能發(fā)生變

化的程度來確定設(shè)計策略和設(shè)計風(fēng)險。要知道,設(shè)計過度與設(shè)計不足同樣對項目有害。

學(xué)習(xí)設(shè)計模式,死記硬背是沒用的,還要從實踐中理解,本教程后面會結(jié)合實例和源

碼來講解如何使用設(shè)計模式。需要特別聲明的是,在日常應(yīng)用中,設(shè)計模式從來都不是單

個設(shè)計模式獨立使用的。在實際應(yīng)用中,通常多個設(shè)計模式混合使用,你中有我,我中有

你。

3、設(shè)計原則

軟件設(shè)計模式必須盡量遵循的原則,是設(shè)計模式的基礎(chǔ)。在實際開發(fā)過程中,并不是一

定要求所有代碼都遵循設(shè)計原則,而是要綜合考慮人力、時間、成本、質(zhì)量,不刻意追求完

美,要在適當(dāng)?shù)膱鼍白裱O(shè)計原則。這體現(xiàn)的是一種平衡取舍,可以幫助我們設(shè)計出更加優(yōu)

雅的代碼結(jié)構(gòu)。

各種原則要求的側(cè)重點不同,下面我們分別用一句話歸納總結(jié)軟件設(shè)計模式的七大原則,如

下表所示。

設(shè)計原則一句話歸納目的

開閉原則對獷展開放,對修改關(guān)閉降低維滬帶來的新風(fēng)險

依賴倒置原

高層不應(yīng)該依賴低層,要面向接口編程更利于代碼結(jié)構(gòu)的升級擴(kuò)展

單一職責(zé)原

Y類只干一件事,實現(xiàn)類要單一便于理解,提高代碼的可讀性

接口隔離原

一個接口只干T牛事,接口要精簡單一功能解稻,扃聚合、低輛合

不該知道的不要知道,一個類應(yīng)該保持對其它對象最少的了解,降低只和朋友交流,不和陌生人說話,減少代

迪米特法則

輾合度碼腕腫

里氏替換原不要破壞繼承體系,子類重寫方法功能發(fā)生改變,不應(yīng)該影嗣父類方

防止繼承泛濫

則法的含義

合成宜用原

盡■使用蛆合或右聚合關(guān)系實現(xiàn)代碼豆用,少使用繼承P年低代碼煙臺

實際上,這些原則的目的只有一個:降彳氐對象之間的耦合,增加程序的可復(fù)用性、可

擴(kuò)展性和可維護(hù)性。

記憶口訣:訪問加限制,函數(shù)要節(jié)但,依賴不允許,動態(tài)加接口,父類要抽象,擴(kuò)展不

更改。

在程序設(shè)計時,我們應(yīng)該將程序功能最小化,每個類只干一件事。若有類似功能基礎(chǔ)之

上添加新功能,則要合理使用繼承。對于多方法的調(diào)用,要會運(yùn)用接口,同時合理設(shè)置接口

功能與數(shù)量。最后類與類之間做到低耦合高內(nèi)聚。

4、創(chuàng)建型模式

創(chuàng)建型模式的主要關(guān)注點是“怎樣創(chuàng)建對象?”,它的主要特點是“將對象的創(chuàng)建與

使用分離"。這樣可以降低系統(tǒng)的耦合度,使用者不需要關(guān)注^掇的創(chuàng)建細(xì)節(jié),對象的創(chuàng)

建由相關(guān)的工廠來完成。就像我們?nèi)ド虉鲑徺I商品時,不需要知道商品是怎么生產(chǎn)出來一

樣,因為它們由專門的廠商生產(chǎn)。

創(chuàng)建型模式分為以下幾種。

?單例(Singleton)模式:某個類只能生成一個實例,該類提供了一個全局訪問點供外部

獲取該實例,其拓展是有限多例模式?!緦ο髣?chuàng)建型模式】

?原型(Prototype)模式:將一個對象作為原型,通過對其進(jìn)行復(fù)制而克隆出多個和原型

類似的新實例?!緦ο髣?chuàng)建型模式】

?建造者(Builder)模式:將一個復(fù)雜對象分解成多個相對簡單的部分,然后根據(jù)不同需要

分別創(chuàng)建它們,最后構(gòu)建成該復(fù)雜對象?!緦ο髣?chuàng)建型模式】

?工廠方法(FactoryMethod)模式:定義一個用于創(chuàng)建產(chǎn)品的接口,由子類決定生產(chǎn)什么

產(chǎn)品。【類創(chuàng)建型模式】

?抽象工廠(AbstractFactory)模式:提供一個創(chuàng)建產(chǎn)品族的接口,其每個子類可以生產(chǎn)一

系列相關(guān)的產(chǎn)品。【類創(chuàng)建型模式】

4」、單例(Singleton)模式

4.1.1.定義與特點

單例(Singleton)模式的定義:指一個類只有一個實例,且該類能自行創(chuàng)建這個實例

的一種模式。例如,Windows中只能打開一個任務(wù)管理器,這樣可以避免因打開多個任務(wù)

管理器窗口而造成內(nèi)存資源的浪費(fèi),或出現(xiàn)各個窗口顯示內(nèi)容的不一致等錯誤。

在計算機(jī)系統(tǒng)中,還有Windows的回收站、操作系統(tǒng)中的文件系統(tǒng)、多線程中的線程

池、顯卡的驅(qū)動程序?qū)ο蟆⒋蛴C(jī)的后臺處理服務(wù)、應(yīng)用程序的日志對象、數(shù)據(jù)庫的連接池、

網(wǎng)站的計數(shù)器、Web應(yīng)用的配置對象、應(yīng)用程序中的對話框、系統(tǒng)中的緩存等常常被設(shè)計

成單例。

單例模式在現(xiàn)實生活中的應(yīng)用也非常廣泛例如公司CEO、部門經(jīng)理等都屬于單例模型。

J2EE標(biāo)準(zhǔn)中的ServletContrxt和ServletContextConfigxSpring框架應(yīng)用中的

Applicationcontext,數(shù)據(jù)庫中的連接池等也都是單例模式。

單例模式有3介特點:

1.單例類只有一個實例對象;

2.該單例對象必須由單例類自行創(chuàng)建;

3.單例類對外提供一個訪問該單例的全局訪問點。

4.1.2.優(yōu)點和缺點

單例模式的優(yōu)點:

?單例模式可以保證內(nèi)存里只有一個實例,減少了內(nèi)存的開銷。

?可以避免對資源的多重占用。

?單例模式設(shè)置全局訪問點,可以優(yōu)化和共享斐源的訪問。

單例模式的缺點:

?單例模式一般沒有接口,擴(kuò)展困難。如果要擴(kuò)展,則除了修改原來的代碼,沒有第二種途

徑,違背開閉原則。

?在并發(fā)測試中,單例模式不利于代碼調(diào)試。在調(diào)試過程中,如果單例中的代碼沒有執(zhí)行

完,也不能模擬生成一個新的對象。

?單例模式的功能代碼通常寫在一個類中,如果功能設(shè)計不合理,則很容易違背單一職責(zé)原

則。

4.1.3.應(yīng)用場景

對于典來說,單例模式可以保證在一個JVM中只存在單一實例。單例模式的應(yīng)用場景

主要有以下幾個方面。

?需要頻繁創(chuàng)建的一些類,使用單例可以降低系統(tǒng)的內(nèi)存壓力,減少GC。

?某類只要求生成一個對象的時候,如一個班中的班長、每個人的身份證號等。

?某些類創(chuàng)建實例時占用資源較多,或?qū)嵗臅r較長,且經(jīng)常使用。

?某類需要頻繁實例化,而創(chuàng)建的對象又頻繁被銷毀的時候,如多線程的線程池、網(wǎng)絡(luò)連接

池等。

?頻繁訪問數(shù)據(jù)庫或文件的對象。

?對于一些控制硬件級別的操作,或者從系統(tǒng)上來講應(yīng)當(dāng)是單一控制邏輯的操作,如果有多

個實例,則系統(tǒng)會完全亂套。

?當(dāng)對象需要被共享的場合。由于單例模式只允許創(chuàng)建一個對象,共享該對象可以節(jié)省內(nèi)

存,并加快對象訪問速度。如Web中的配置對象、數(shù)據(jù)庫的連接池等。

4.1.4、結(jié)構(gòu)與實現(xiàn)

單例模式是睢t模式中最簡單的模式之一。通常,普通類的構(gòu)造函數(shù)是公有的,外部類

可以通過"new構(gòu)造函數(shù)()"來生成多個實例。但是,如果將類的構(gòu)造函數(shù)設(shè)為私有的,外

部類就無法調(diào)用該構(gòu)造函數(shù),也就無法生成多個實例。這時該類自身必須定義一個靜態(tài)私有

實例,并向外提供一個靜態(tài)的公有函數(shù)用于創(chuàng)建或獲取該靜態(tài)私有實例。

下面來分析其基本結(jié)構(gòu)和實現(xiàn)方法。

單例模式的主要角色如下。

?單例類:包含一個實例且能自行創(chuàng)建這個實例的類。

?訪問類:使用單例的類。

其結(jié)構(gòu)如圖1所示。

單例類Singleton

一instance:SingletonO-

-Singleton()

+getlnstance():Singleton

publicstaticsynchronizedSingletorgetlnstance(){4

if(instance==null){II用懶漢方式實現(xiàn)

instance=newSingleton();

}else{

System.out.p「intln(“單例對象已經(jīng)創(chuàng)建!”);

}

returninstance;

J

設(shè)計步驟

步驟1:在單例類內(nèi)部定義了一個Singleton類型的靜態(tài)對象,作為外部共享的唯一實例

步驟2:提供一個公共靜態(tài)的方法,讓客戶可以訪問它的唯一實例。

步驟3:為了防止在外部對實例化其他對象,將其默認(rèn)構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù)設(shè)計為私

4.2、原型(Prototype)模式

4.2.1.定義與特點

原型(Prototype)模式的定義如下:用一個已經(jīng)創(chuàng)建的實例作為原型,通過復(fù)制該原

型對象來創(chuàng)建一個和原型相同或相似的新對象。在這里,原型實例指定了要創(chuàng)建的對象的種

類。用這種方式創(chuàng)建對象非常高效,根本無須知道對象創(chuàng)建的細(xì)節(jié)。例如,Windows操作

系統(tǒng)的安裝通常較耗時,如果復(fù)制就快了很多。

422、優(yōu)點和缺點

原型模式的優(yōu)點:

?Java自帶的原型模式基于內(nèi)存二進(jìn)制流的復(fù)制,在性能上比直接new一個對象更加優(yōu)

良。

?可以使用深克隆方式保存對象的狀態(tài),使用原型模式將對象復(fù)制T分,并將其狀態(tài)保存起

來,簡化了創(chuàng)建對象的過程,以便在需要的時候使用(例如恢復(fù)到歷史某一狀態(tài)),可輔助

實現(xiàn)撤銷操作。

原型模式的缺點:

?需要為每一個類都配置一個clone方法

?clone方法位于類的內(nèi)部,當(dāng)對已有類進(jìn)行改造的時候,需要修改代碼,違背了開閉原

則。

?當(dāng)實現(xiàn)深克隆時,需要編寫較為復(fù)雜的代碼,而且當(dāng)對象之間存在多重嵌套引用時,為了

實現(xiàn)深克隆,每一層對象對應(yīng)的類都必須支持深克隆,實現(xiàn)起來會比較麻煩。因此,深克

隆、淺克隆需要運(yùn)用得當(dāng)。

423、應(yīng)用場景

在有些系統(tǒng)中,存在大量相同或相似對象的創(chuàng)建問題,如果用傳統(tǒng)的構(gòu)造函數(shù)來創(chuàng)建

對象,會比較復(fù)雜且耗時耗資源,用原型模式生成對象就很高效,就像孫悟空拔下猴毛輕

輕一吹就變出很多孫悟空一樣簡單。

424、結(jié)構(gòu)與實現(xiàn)

由于Java提供了對象的clone(:i方法,所以用Java實現(xiàn)原型模式很簡單。

1.模式的結(jié)構(gòu)

原型模式包含以下主要角色。

1.抽象原型類:規(guī)定了具體原型對象必須實現(xiàn)的接口。

2.具體原型類:實現(xiàn)抽象原型類的cloneO方法,它是可被復(fù)制的對象。

3.訪問類:使用具體原型類中的cloneO方法來復(fù)制新的對象。

其結(jié)構(gòu)圖如圖1所示。

o

Prototype

+clone():Prototype

/

/

Realizetypeobjl=newRealizetype();

Realizetypeobj1-(Realizetype)obj1clone();

圖1原型模式的結(jié)構(gòu)圖

設(shè)計步驟

1、創(chuàng)建一個實現(xiàn)了Cloneable接口的抽象類。

2、創(chuàng)建擴(kuò)展了上面抽象類的實體類。

3、創(chuàng)建一個類,從數(shù)據(jù)庫獲取實體類A,并把它們存儲在一個Hashtable中。

4、使用A類來獲取存儲在Hashtable中的形狀的克隆。

2.模式的實現(xiàn)

原型模式的克隆分為淺克隆和深克隆。

?淺克?。簞?chuàng)建一個新對象,新對象的屬性和原來對象完全相同,對于非基本類型屬性,仍

指向原有屬性所指向的對象的內(nèi)存地址。

?深克隆:創(chuàng)建一個新對象,屬性中引用的其他對象也會被克隆,不再指向原有對象地址。

43、建造者(Builder)模式

43.1.定義與特點

建造者(Builder)模式的定義:指將一個復(fù)雜對象的構(gòu)造與它的表示分離,使同樣的

構(gòu)建過程可以創(chuàng)建不同的表示,這樣的遨讓模式被稱為建造者模式。它是將一個復(fù)雜的對象

分解為多個簡單的對象,然后一步一步構(gòu)建而成。它將變與不變相分離,即產(chǎn)品的組成部分

是不變的,但每一部分是可以靈活選擇的。

4.3.2、優(yōu)點和缺點

該模式的主要優(yōu)點如下:

1.封裝性好,構(gòu)建和表示分離。

2.擴(kuò)展性好,各個具體的建造者相互獨立,有利于系統(tǒng)的解耦。

3.客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),建造者可以對創(chuàng)建過程逐步細(xì)化,而不對其它模塊

產(chǎn)生任何影響,便于控制細(xì)節(jié)風(fēng)險。

其缺點如下:

1.產(chǎn)品的組成部分必須相同,這限制了其使用范圍。

2.如果產(chǎn)品的內(nèi)部變化復(fù)雜,如果產(chǎn)品內(nèi)部發(fā)生變化,則建造者也要同步修改,后期維護(hù)成

本較大。

建造者(Builder)模式和工廠模式的關(guān)注點不同:建造者模式注重零部件的組裝過程,而

工廠方法模式更注重零部件的創(chuàng)建過程,但兩者可以結(jié)合使用。

4.3.3、應(yīng)用場景

在軟件開發(fā)過程中有時需要創(chuàng)建一個復(fù)雜的對象,這個復(fù)雜對象通常由多個子部件按一

定的步驟組合而成。例如,計算機(jī)是由CPU、主板、內(nèi)存、硬盤、顯卡、機(jī)箱、顯示器、

鍵盤、鼠標(biāo)等部件組裝而成的,采購員不可能自己去組裝計算機(jī),而是將計算機(jī)的配置要求

告訴計算機(jī)銷售公司,計算機(jī)銷售公司安排技術(shù)人員去組裝計算機(jī),然后再交給要買計算機(jī)

的采購員。

生活中這樣的例子很多,如游戲中的不同角色,其性別、個性、能力、臉型、體型、服

裝、發(fā)型等特性都有所差異;還有汽車中的方向盤、發(fā)動機(jī)、車架、輪胎等部件也多種多樣;

每封電子郵件的發(fā)件人、收件人、主題、內(nèi)容、附件等內(nèi)容也各不相同。

以上所有這些產(chǎn)品都是由多個部件構(gòu)成的,各個部件可以靈活選擇,但其創(chuàng)建步驟都大

同小異。這類產(chǎn)品的創(chuàng)建無法用前面介紹的工廠模式描述,只有建造者模式可以很好地描述

該類產(chǎn)品的創(chuàng)建。

43.4.結(jié)構(gòu)與實現(xiàn)

建造者(Builder)模式由產(chǎn)品、抽象建造者、具體建造者、指揮者等4個要素構(gòu)成,

現(xiàn)在我們來分析其基本結(jié)構(gòu)和實現(xiàn)方法。

建造者(Builder)模式的主要角色如下。

1.產(chǎn)品角色(Product):它是包含多個組成部件的復(fù)雜對象,由具體建造者來創(chuàng)建其各個零

部件。

2.抽象建造者(Builder):它是一個包含創(chuàng)建產(chǎn)品各個子部件的抽象方法的接口,通常還包

含一個返回復(fù)雜產(chǎn)品的方法()

getResult0

3.具體建造者(ConcreteBuilder):實現(xiàn)Builder接口,完成復(fù)雜產(chǎn)品的各個部件的具體

創(chuàng)建方法。

4.指揮者(Director):它調(diào)用建造者對象中的部件構(gòu)造與裝配方法完成復(fù)雜對象的創(chuàng)建,

在指揮者中不涉及具體產(chǎn)品的信息。

其結(jié)構(gòu)圖如圖1所示。

圖1建造者模式的結(jié)構(gòu)圖

設(shè)計步驟

1、建造者(Builder)接口聲明在所有類型生成器中通用的產(chǎn)品構(gòu)造步驟。

2、具體建造者(ConcreteBuilders)提供構(gòu)造過程的不同實現(xiàn)。具體生成器也可以構(gòu)

造不遵循通用接口的產(chǎn)品。

3、指揮者類(Director)類定義調(diào)用構(gòu)造步驟的順序,這樣你就可以創(chuàng)建和復(fù)用特定的

產(chǎn)品配置。

4、產(chǎn)品(Products)是最終生成的對象。由不同生成器構(gòu)造的產(chǎn)品無需屬于同一類層

次結(jié)構(gòu)或接口。

5、客戶端(Client)必須將某個建造者對象與才旨揮類關(guān)聯(lián)。一般情況下,你只需通過

指揮類構(gòu)造函數(shù)的參數(shù)進(jìn)行一次性關(guān)聯(lián)即可。此后指揮類就能使用建造者對象完成后續(xù)所

有的構(gòu)造任務(wù)。

4.4、工廠方法(FactoryMethod)模式

4.4.1.定義與特點

在現(xiàn)實生活中社會分工越來越細(xì),越來越專業(yè)化。各種產(chǎn)品有專門的工廠生產(chǎn),徹底

告別了自給自足的小農(nóng)經(jīng)濟(jì)時代,這大大縮短了產(chǎn)品的生產(chǎn)周期,提高了生產(chǎn)效率。同

樣,在軟件開發(fā)中能否做到軟件對象的生產(chǎn)和使用相分離呢?能否在滿足“開閉原則”的

前提下,客戶隨意增刪或改變對軟件相關(guān)對象的使用呢?

工程方法定義一個用于創(chuàng)建產(chǎn)品的接口,由子類決定生產(chǎn)什么產(chǎn)品。其好處是可以使

系統(tǒng)在不修改原來代碼的情況下引進(jìn)新的產(chǎn)品,即滿足開閉原則。

442、優(yōu)點和缺點

優(yōu)點:

?用戶只需要知道具體工廠的名稱就可得到所要的產(chǎn)品,無須知道產(chǎn)品的具體創(chuàng)建過程。

?靈活性增強(qiáng),對于新產(chǎn)品的創(chuàng)建,只需多寫一個相應(yīng)的工廠類。

?典型的解耦框架。高層模塊只需要知道產(chǎn)品的抽象類,無須關(guān)心其他實現(xiàn)類,滿足迪米特

法則、依賴倒置原則和里氏替換原則。

缺點:

?類的個數(shù)容易過多,增加復(fù)雜度

?增加了系統(tǒng)的抽象性和理解難度

?抽象產(chǎn)品只能生產(chǎn)一種產(chǎn)品,此弊端可使用抽象工廠模式解決。

4.4.3.應(yīng)用場景

?客戶只知道創(chuàng)建產(chǎn)品的工廠名,而不知道具體的產(chǎn)品名。如TCL電視工廠、海信電視工

廠等。

?創(chuàng)建對象的任務(wù)由多個具體子工廠中的某一個完成,而抽象工廠只提供創(chuàng)建產(chǎn)品的接口。

?客戶不關(guān)心創(chuàng)建產(chǎn)品的細(xì)節(jié),只關(guān)心產(chǎn)品的品牌。

4.4.4.結(jié)構(gòu)與實現(xiàn)

工廠方法模式由抽象工廠、具體工廠、抽象產(chǎn)品和具體產(chǎn)品等4個要素構(gòu)成.本節(jié)來分析其

基本結(jié)構(gòu)和實現(xiàn)方法。

工廠方法模式的主要角色如下。

1.抽象工廠(AbstractFactory):提供了創(chuàng)建產(chǎn)品的接口,調(diào)用者通過它訪問具體工廠的

工廠方法newProductQ來創(chuàng)建產(chǎn)品。

2.具體工廠(ConcreteFactory):主要是實現(xiàn)抽象工廠中的抽象方法,完成具體產(chǎn)品的創(chuàng)

3.抽象產(chǎn)品(Product):定義了產(chǎn)品的規(guī)范,描述了產(chǎn)品的主要特性和功能。

4.具體產(chǎn)品(ConcreteProduct):實現(xiàn)了抽象產(chǎn)品角色所定義的接口,由具體工廠來創(chuàng)

建,它同具體工廠之間一對應(yīng)。

其結(jié)構(gòu)圖如圖1所示。

OCliento

AbstractFacioryProduct

?newBroduct():Broduct+show():void

ConcreteFaciorylConcreteFactor>r2ConcreteProductIConcreteProduct2

+ncwProduct():Product+newProduct():Product+show():void?show0:void

Icreate

-1---------

create

圖1工廠方法模式的結(jié)構(gòu)圖

設(shè)計步驟

步驟1:創(chuàng)建抽象工廠類,定義具體工廠的公共接口;

步驟2:創(chuàng)建抽象產(chǎn)品類,定義具體產(chǎn)品的公共接口;

步驟3:創(chuàng)建具體產(chǎn)品類(繼承抽象產(chǎn)品類)&定義生產(chǎn)的具體產(chǎn)品;

步驟4:創(chuàng)建具體工廠類(繼承抽象工廠類),定義創(chuàng)建對應(yīng)具體產(chǎn)品實例的

方法;

步驟5:外界通過調(diào)用具體工廠類的方法,從而創(chuàng)建不同具體產(chǎn)品類的實例

4.5、抽象工廠(AbstractFactory)模式

4.5.1.定義與特點

抽象工廠(AbstractFactory)模式的定義:是一種為訪問類提供一個創(chuàng)建一組相關(guān)或

相互依賴對象的接口,且訪問類無須指定所要產(chǎn)品的具體類就能得到同族的不同等級的產(chǎn)品

的模式結(jié)構(gòu)。

抽象工廠模式是工廠方法模式的升級版本,工廠方法模式只生產(chǎn)一個等級的產(chǎn)品,而抽象

工廠模式可生產(chǎn)多個等級的產(chǎn)品。

使用抽象工廠模式一般要滿足以下條件。

?系統(tǒng)中有多個產(chǎn)品族,每個具體工廠創(chuàng)建同一族但屬于不同等級結(jié)構(gòu)的產(chǎn)品。

?系統(tǒng)一次只可能消費(fèi)其中某一族產(chǎn)品,即同族的產(chǎn)品一起使用。

452、優(yōu)點和缺點

抽象工廠模式除了具有工廠方法模式的優(yōu)點外,其他主要優(yōu)點如下。

?可以在類的內(nèi)部對產(chǎn)品族中相關(guān)聯(lián)的多等級產(chǎn)品共同管理,而不必專門引入多個新的類來

進(jìn)行管理。

?當(dāng)需要產(chǎn)品族時,抽象工廠可以保證客戶端始終只使用同一個產(chǎn)品的產(chǎn)品組。

?抽象工廠增強(qiáng)了程序的可擴(kuò)展性,當(dāng)增加一個新的產(chǎn)品族時,不需要修改原代碼,滿足開

閉原則。

其缺點是:當(dāng)產(chǎn)品族中需要增加一個新的產(chǎn)品時,所有的工廠類都需要進(jìn)行修改。增加了

系統(tǒng)的抽象性和理解難度。

4.5.3.應(yīng)用場景

i.當(dāng)需要創(chuàng)建的對象是一系列相互關(guān)聯(lián)或相互依賴的產(chǎn)品族時,如電器工廠中的電視機(jī)、洗

衣機(jī)、空調(diào)等。

2.系統(tǒng)中有多個產(chǎn)品族,但每次只使用其中的某一族產(chǎn)品。如有人只喜歡穿某一個品牌的衣

服和鞋。

3.系統(tǒng)中提供了產(chǎn)品的類庫,且所有產(chǎn)品的接口相同,客戶端不依賴產(chǎn)品實例的創(chuàng)建細(xì)節(jié)和

內(nèi)部結(jié)構(gòu)。

4.5.4、結(jié)構(gòu)與實現(xiàn)

抽象工廠模式同工廠方法模式一樣,也是由抽象工廠、具體工廠、抽象產(chǎn)品和具體產(chǎn)品等4

個要素構(gòu)成,蹴象工廠中方法個數(shù)不同,抽象產(chǎn)品的個數(shù)也不同。現(xiàn)在我們來分析其基本

結(jié)構(gòu)和實現(xiàn)方法。

1.模式的結(jié)構(gòu)

抽象工廠模式的主要角色如下。

1.抽象工廠(AbstractFactory):提供了創(chuàng)建產(chǎn)品的接口,它包含多個創(chuàng)建產(chǎn)品的方法

newProductO,可以創(chuàng)建多個不同等級的產(chǎn)品。

2.具體工廠(ConcreteFactory):主要是實現(xiàn)抽象工廠中的多個抽象方法,完成具體產(chǎn)品

的創(chuàng)建。

3.抽象產(chǎn)品(Product):定義了產(chǎn)品的規(guī)范,描述了產(chǎn)品的主要特性和功能,抽象工廠模式

有多個抽象產(chǎn)品。

4.具體產(chǎn)品(ConcreteProduct):實現(xiàn)了抽象產(chǎn)品角色所定義的接口,由具體工廠來創(chuàng)

建,它同具體工廠之間是多對一的關(guān)系。

抽象工廠模式的結(jié)構(gòu)圖如圖2所示。

o

AbstractFactory

+newProductl():ProductI

+newProtluct2():Product2

5-

ConcreteFactorylConcreteFactory2

+newProductl():ProductI+newEroductlOU^oductl

+newProduct2():Product2+newProduct2():Product2

createcreate/create

ConcreteProduct?1ConcreteProduct22

+show():void+show():void

VV

ProductIProduct2

+show():void+slx>w():void

AA

圖2抽象工廠模式的結(jié)構(gòu)圖

設(shè)計步驟

1、創(chuàng)建抽象工廠類,定義具體工廠的公共接口;

2、創(chuàng)建抽象產(chǎn)品族類,定義抽象產(chǎn)品的公共接口;

3、創(chuàng)建抽象產(chǎn)品類(繼承抽象產(chǎn)品族類),定義具體產(chǎn)品的公共接口;

4、創(chuàng)建具體產(chǎn)品類(繼承抽象產(chǎn)品類)

溫馨提示

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

最新文檔

評論

0/150

提交評論