《軟件設(shè)計模式(Java版)》課件 第02章 創(chuàng)建型模式(上)_第1頁
《軟件設(shè)計模式(Java版)》課件 第02章 創(chuàng)建型模式(上)_第2頁
《軟件設(shè)計模式(Java版)》課件 第02章 創(chuàng)建型模式(上)_第3頁
《軟件設(shè)計模式(Java版)》課件 第02章 創(chuàng)建型模式(上)_第4頁
《軟件設(shè)計模式(Java版)》課件 第02章 創(chuàng)建型模式(上)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章創(chuàng)建型模式(上)內(nèi)容簡介?本章教學(xué)目標:

掌握單例模式與原型模式的定義與特點、結(jié)構(gòu)與實現(xiàn);

熟悉使用單例模式與原型模式開發(fā)應(yīng)用程序;

了解創(chuàng)建型模式的特點和分類與擴展。?本章價值引領(lǐng):

通過介紹單例模式的優(yōu)點,培養(yǎng)學(xué)生提高資源利用率和數(shù)據(jù)可靠性的意識;通過孫悟空實例,提高學(xué)生文化強國意識和為中國動漫產(chǎn)業(yè)盡一份力的思想;通過介紹原型模式的主要優(yōu)點,提高學(xué)生的科學(xué)創(chuàng)新與科技強國的方法。軟件設(shè)計模式(Java版)、作者:程細柱ISBN:978-7-115-47788-0人民郵電出版社(和)2.1創(chuàng)建型模式概述創(chuàng)建型模式的主要特點是什么?它的主要特點是“將對象的創(chuàng)建與使用分離”,這樣可以降低系統(tǒng)的耦合度。創(chuàng)建型模式分為以下幾種:⑴單例(Singleton)模式:某個類只能生成一個實例,該類提供了一個全局訪問點供外部獲取該實例,其拓展是有限多例模式。⑵原型(Prototype)模式:將一個對象作為原型,通過對其進行復(fù)制而克隆出多個和原型類似的新實例。⑶工廠方法(FactoryMethod)模式:定義一個用于創(chuàng)建產(chǎn)品的接口,由子類決定生產(chǎn)什么產(chǎn)品。⑷抽象工廠(AbstractFactory)模式:提供一個創(chuàng)建產(chǎn)品族的接口,其每個子類可以生產(chǎn)一系列相關(guān)的產(chǎn)品。⑸建造者(Builder)模式:將一個復(fù)雜對象分解成多個相對簡單的部分,然后根據(jù)不同需要分別創(chuàng)建它們,最后構(gòu)建成該復(fù)雜對象。軟件設(shè)計模式(Java版)、作者:程細柱ISBN:978-7-115-47788-0人民郵電出版社(和)2.2單例(Singleton)模式2.2.1模式的定義與特點

定義:指一個類只有一個實例,且該類能自行創(chuàng)建這個實例的一種模式。例如,Windows中的任務(wù)管理器、回收站等。

特點:1)單例類只有一個實例對象;2)該單例對象必須由單例類自行創(chuàng)建;3)單例類對外提供一個訪問該單例的全局訪問點。2.2.2模式的結(jié)構(gòu)與實現(xiàn)

1.模式的結(jié)構(gòu)單例模式的主要角色有:⑴單例類:包含一個實例且能自行創(chuàng)建這個實例的類。⑵訪問者類:使用單例的類。其結(jié)構(gòu)圖如下:軟件設(shè)計模式(Java版)、作者:程細柱ISBN:978-7-115-47788-0人民郵電出版社(和)2.2單例(Singleton)模式(續(xù))2.2.2模式的結(jié)構(gòu)與實現(xiàn)

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

普通類的構(gòu)造函數(shù)是公有的,外部類可以通過“new構(gòu)造函數(shù)()”來生成多個實例。但是,如果將類的構(gòu)造函數(shù)設(shè)為私有的,外部類就無法調(diào)用它生成多個實例了。這時該類自身必須定義一個靜態(tài)私有實例,并向外提供一個靜態(tài)的公有函數(shù)用于創(chuàng)建或獲取該靜態(tài)私有實例,有2種常見的實現(xiàn)形式。軟件設(shè)計模式(Java版)、作者:程細柱ISBN:978-7-115-47788-0人民郵電出版社(和)2.2單例(Singleton)模式(續(xù))第1種:懶漢式單例該模式的特點是類加載時沒有生成單例,只有當(dāng)?shù)谝淮握{(diào)用getInstance方法時才去創(chuàng)建這個單例。代碼如下:publicclassLazySingleton{privatestaticvolatileLazySingletoninstance=null;//保證instance在所有線程中同步privateLazySingleton(){}//private避免類在外部被實例化publicstaticsynchronizedLazySingletongetInstance(){//getInstance方法前加同步if(instance==null){instance=newLazySingleton();}returninstance;}}軟件設(shè)計模式(Java版)、作者:程細柱ISBN:978-7-115-47788-0人民郵電出版社(和)2.2單例(Singleton)模式(續(xù))第2種:餓漢式單例該模式的特點是類一旦加載就創(chuàng)建一個單例,保證在調(diào)用getInstance方法之前單例已經(jīng)存在了。publicclassHungrySingleton{privatestaticfinalHungrySingletoninstance=newHungrySingleton();privateHungrySingleton(){}publicstaticHungrySingletongetInstance(){returninstance;}}軟件設(shè)計模式(Java版)、作者:程細柱銷售電話學(xué)資源網(wǎng)址:/book/details/84022.2單例(Singleton)模式(續(xù))2.2.3模式的應(yīng)用實例

【例2.1】用懶漢式單例模式模擬華強智能有限公司的工會組織的成立。

分析:因為一個公司的工會組織只要求一個,所以可以用單例模式來實現(xiàn),右邊是用懶漢式單例實現(xiàn)的結(jié)構(gòu)圖:

注:程序代碼見附件。軟件設(shè)計模式(Java版)、作者:程細柱銷售電話學(xué)資源網(wǎng)址:/book/details/84022.2單例(Singleton)模式(續(xù))2.2.3模式的應(yīng)用實例

【例2.2】用餓漢式單例模式模擬資源管理器的創(chuàng)建。

分析:一個軟件系統(tǒng)的資源管理器通常只需創(chuàng)建一個,所以本實例同樣適合用單例模式實現(xiàn),右邊是用餓漢式單例實現(xiàn)的結(jié)構(gòu)圖:注:程序代碼見附件。軟件設(shè)計模式(Java版)、作者:程細柱銷售電話學(xué)資源網(wǎng)址:/book/details/84022.2單例(Singleton)模式(續(xù))2.2.3模式的應(yīng)用實例

【例2.2】用餓漢式單例模式模擬資源管理器的創(chuàng)建。

右邊是程序的運行結(jié)果:軟件設(shè)計模式(Java版)、作者:程細柱銷售電話學(xué)資源網(wǎng)址:/book/details/84022.2單例(Singleton)模式(續(xù))2.2.4模式的應(yīng)用場景前面我們分析了單例模式的結(jié)構(gòu)與特點,現(xiàn)在來看看它通常適用的以下場景的特點:

(1)在應(yīng)用場景中,某類只要求生成一個對象的時候。如:一個班中的班長、每個人的身份證號等;(2)當(dāng)對象需要被共享的場合。由于單例模式只允許創(chuàng)建一個對象,共享該對象可以節(jié)省內(nèi)存,并加快對象訪問速度。如:WEB中的配置對象、數(shù)據(jù)庫的連接池等。(3)當(dāng)某類需要頻繁實例化,而創(chuàng)建的對象又頻繁被銷毀的時候。如:多線程的線程池、網(wǎng)絡(luò)連接池等。軟件設(shè)計模式(Java版)、作者:程細柱銷售電話民郵電出版社(和)2.2單例(Singleton)模式(續(xù))2.2.5模式的擴展單例模式可擴展為有限的多例(Multiton)模式,這種模式可生成有限個實例并保存在ArrayList中,客戶需要時可隨機獲取,其結(jié)構(gòu)圖如右:軟件設(shè)計模式(Java版)、作者:程細柱銷售電話民郵電出版社(和)2.3原型(Prototype)模式2.3.1模式的定義與特點

定義:用一個已經(jīng)創(chuàng)建的實例作為原型,通過拷貝該原型對象來創(chuàng)建一個和原型相同或相似的新對象。在這里,原型實例指定了要創(chuàng)建的對象的種類。如:Windows中的COPY操作。

特點:創(chuàng)建對象非常高效,根本無需知道對象創(chuàng)建的細節(jié)。2.3.2模式的結(jié)構(gòu)與實現(xiàn)

1.模式的結(jié)構(gòu)原型模式包含以下主要角色:⑴抽象原型類:規(guī)定了具體原型對象必須實現(xiàn)的接口。⑵具體原型類:實現(xiàn)抽象原型類的clone方法,它可被復(fù)制。⑶訪問者類:使用具體原型類中的clone方法來復(fù)制新的對象。軟件設(shè)計模式(Java版)、作者:程細柱銷售電話民郵電出版社(和)2.3原型(Prototype)模式(續(xù))2.3.2模式的結(jié)構(gòu)與實現(xiàn)

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

其結(jié)構(gòu)圖如下:軟件設(shè)計模式(Java版)、作者:程細柱銷售電話民郵電出版社(和)2.3原型(Prototype)模式(續(xù))2.3.2模式的結(jié)構(gòu)與實現(xiàn)

2.模式的實現(xiàn)原型模式的克隆分為淺克隆和深克隆,Java中的Object類提供了淺克隆的clone()方法,具體原型類只要實現(xiàn)Cloneable接口就可實現(xiàn)對象的淺克隆,這里的Cloneable接口就是抽象原型類。

//其實現(xiàn)代碼見附件軟件設(shè)計模式(Java版)、作者:程細柱銷售電話民郵電出版社(和)2.3原型(Prototype)模式(續(xù))2.3.3模式的應(yīng)用實例

【例2.3】用原型模式模擬“孫悟空”復(fù)制自己。

分析:孫悟空拔下猴毛輕輕一吹就變出很多孫悟空,這實際上是用到了原型模式,右邊是其結(jié)構(gòu)圖:

注:程序代碼見附件軟件設(shè)計模式(Java版)、作者:程細柱銷售電話民郵電出版社(和)2.3原型(Prototype)模式(續(xù))2.3.3模式的應(yīng)用實例

【例2.3】用原型模式模擬“孫悟空”復(fù)制自己。

//右邊是程序的運行結(jié)果:軟件設(shè)計模式(Java版)、作者:程細柱銷售電話民郵電出版社(和)2.3原型(Prototype)模式(續(xù))2.3.3模式的應(yīng)用實例

【例2.4】用原型模式生成“三好學(xué)生”獎狀。

分析:同一學(xué)校的“三好學(xué)生”獎狀除了獲獎人姓名不同,其他都相同,屬于相似對象的復(fù)制,同樣可以用原型模式創(chuàng)建,然后再做簡單修改就可以了,右邊是其結(jié)構(gòu)圖:

注:程序代碼見附件軟件設(shè)計模式(Java版)、作者:程細柱銷售電話民郵電出版社(和)2.3原型(Prototype)模式(續(xù))2.3.4模式的應(yīng)用場景原型模式通常適用以下場景:1)對象之間相同或相似,即只是個別的幾個屬性不同的時候。

2)對象的創(chuàng)建過程比較麻煩,但克隆比較簡單時候。軟件設(shè)計模式(Java版)、作者:程細柱銷售電話民郵電出版社(和)2.3原型(Prototype)模式(續(xù))2.3.5模式的擴展原型模式可擴展為帶原型管理器的原型模式,它在原型模式的基礎(chǔ)上增加了一個原型管理器類。該類用HashMap保存多個原型的拷貝,Client類可以通過管理器的get(Stringid)方法從中獲取原型的拷貝,其結(jié)構(gòu)圖如右:軟件設(shè)計模式(Java版)、作者:程細柱銷售電話民郵電出版社(和)2.3原型(Prototype)模式(續(xù))

【例2.5】用帶原型管理器的原型模式來生成包含“圓”和“正方形”等圖形的原型。

分析:本實例中由于存在不同的圖形類,如:“圓”和“正方形”,它們計算面積的方法不一樣,所以需要用一個原型管理器來管理它們,右邊是其結(jié)構(gòu)圖:

注:程序代碼見附件軟件設(shè)計模式(Java版)、作者:程細柱銷售電話:0

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論