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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

1.模式的結構(續(xù))

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

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

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

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

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

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

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

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

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

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

1.模式的結構(續(xù))

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

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

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

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

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

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

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

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

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

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

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

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

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

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

注:程序代碼見附件軟件設計模式(Java版)、作者:程細柱人民郵電出版社(和)2.4本章小結本章主要介紹了創(chuàng)建型模式的特點和分類,以及單例模式與原型模式的定義與特點、結構與實現(xiàn)、應用場景和模式的擴展,并通過多個應用實例來說明模式的使用方法。習題:見教材。軟件設計模式(Java版)(ISDN:9787564740634)、作者:程細柱本章節(jié)結束,再見!軟件設計模式(Java版)、作者:程細柱人民郵電出版社(和)第3章創(chuàng)建型模式(下)內(nèi)容簡介?本章教學目標:

掌握工廠方法模式、抽象工廠模式、建造者模式的定義與特點、結構與實現(xiàn);

學會使用工廠方法模式、抽象工廠模式、建造者模式開發(fā)應用程序;

明白工廠方法模式、抽象工廠模式、建造者模式的應用場景與擴展方向。?本章價值引領:

結合工廠方法模式的特點,介紹提高國產(chǎn)軟件開發(fā)效率的重要性;

利用工廠方法模式和抽象工廠模式的應用實例介紹培養(yǎng)學生愛國情懷的重要性;

利用建造者模式的應用實例,提高學生的品牌建設意識和科技強國的責任感與使命感。軟件設計模式(Java版)、作者:程細柱ISBN:978-7-115-47788-0人民郵電出版社(和)3.1工廠方法(FactoryMethod)模式3.1.1模式的定義與特點

定義:定義一個創(chuàng)建產(chǎn)品對象的工廠接口,將產(chǎn)品對象的實際創(chuàng)建工作推遲到具體子工廠類當中。這滿足創(chuàng)建型模式中所要求的“創(chuàng)建與使用相分離”的特點。如果要創(chuàng)建的產(chǎn)品不多,只要一個工廠類就可以完成,這種模式叫“簡單工廠模式”,它不屬于GoF的23種經(jīng)典設計模式,它的缺點是增加新產(chǎn)品時會違背“開閉原則”,本書不介紹。

優(yōu)點:1)用戶知道具體工廠的名稱就可得到所要的產(chǎn)品,無須知道產(chǎn)品的創(chuàng)建過程;2)增加新的產(chǎn)品時只需要添加具體產(chǎn)品類和對應的具體工廠類,無需修改源代碼,滿足開閉原則。缺點:每增加一個產(chǎn)品就要增加一個具體產(chǎn)品類和一個對應的具體工廠類,這增加了系統(tǒng)的復雜度。軟件設計模式(Java版)、作者:程細柱ISBN:978-7-115-47788-0人民郵電出版社(和)3.1工廠方法(FactoryMethod)模式(續(xù))3.1.2模式的結構與實現(xiàn)

1.模式的結構工廠方法模式的主要角色有:1)抽象工廠(AbstractFactory):提供了創(chuàng)建產(chǎn)品的接口,調(diào)用者通過它訪問具體工廠的工廠方法newProduct()來創(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)建,它同具體工廠之間一一對應。軟件設計模式(Java版)、作者:程細柱ISBN:978-7-115-47788-0人民郵電出版社(和)3.1工廠方法(FactoryMethod)模式(續(xù))3.1.2模式的結構與實現(xiàn)

1.模式的結構右邊是其結構圖:

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

//該模式的實現(xiàn)代碼見附件軟件設計模式(Java版)、作者:程細柱ISBN:978-7-115-47788-0人民郵電出版社(和)3.1工廠方法(FactoryMethod)模式(續(xù))3.1.3模式的應用實例

【例3.1】用工廠方法模式設計畜牧場生養(yǎng)動物的實例。

分析:有很多種類的畜牧場,如養(yǎng)馬場用于養(yǎng)馬,養(yǎng)牛場用于養(yǎng)牛。所以該實例用工廠方法模式比較適合,右邊是其結構圖。注:程序代碼見附件軟件設計模式(Java版)、作者:程細柱ISBN:978-7-115-47788-0人民郵電出版社(和)3.1工廠方法(FactoryMethod)模式(續(xù))3.1.3模式的應用實例

【例3.1】用工廠方法模式設計畜牧場生養(yǎng)動物的實例。

右邊是程序的運行結果軟件設計模式(Java版)、作者:程細柱教學資源網(wǎng)址:/book/details/84023.1工廠方法(FactoryMethod)模式(續(xù))3.1.4模式的應用場景工廠方法模式通常適用以下場景:1)客戶只知道創(chuàng)建產(chǎn)品的工廠名,而不知道具體的產(chǎn)品名。如:TCL電視工廠、海信電視工廠等;2)創(chuàng)建對象的任務由多個具體子工廠中的某一個完成,而抽象工廠只提供創(chuàng)建產(chǎn)品的接口。3)客戶不關心創(chuàng)建產(chǎn)品的細節(jié),只關心產(chǎn)品的品牌。軟件設計模式(Java版)、作者:程細柱教學資源網(wǎng)址:/book/details/84023.1工廠方法(FactoryMethod)模式(續(xù))3.1.5模式的擴展

當需要生成的產(chǎn)品不多且不會增加,一個具體工廠類就可以完成任務時,可刪除抽象工廠類。這時工廠方法模式將退化到簡單工廠模式,其結構圖如右:軟件設計模式(Java版)、作者:程細柱教學資源網(wǎng)址:/book/details/84023.2抽象工廠模式(AbstractFactory)模式

在前面介紹的工廠方法模式只考慮生產(chǎn)同等級的產(chǎn)品,但是在現(xiàn)實生活中許多工廠是綜合型的工廠,能生產(chǎn)多等級(種類)的產(chǎn)品,如農(nóng)場里既養(yǎng)動物又種植物,電器廠既生成電視機又生成洗衣機或空調(diào),大學既有軟件專業(yè)又有生物專業(yè)等等。本節(jié)要介紹的抽象工廠模式將考慮多等級產(chǎn)品的生產(chǎn),我們將同一個具體工廠所生產(chǎn)的位于不同等級的一組產(chǎn)品稱為一個產(chǎn)品族,右圖所示的是海爾工廠和TCL工廠所生成的電視機與空調(diào)對應的關系圖:軟件設計模式(Java版)、作者:程細柱教學資源網(wǎng)址:/book/details/84023.2抽象工廠模式(AbstractFactory)模式(續(xù))3.2.1模式的定義與特點

定義:是一種為訪問類提供一個創(chuàng)建一組相關或相互依賴對象的接口,且訪問類無需指定所要產(chǎn)品的具體類就能得到同族的不同等級的產(chǎn)品的模式結構。使用抽象工廠模式一般要滿足以下條件:1)系統(tǒng)中有多個產(chǎn)品族,每個具體工廠創(chuàng)建同一族的但屬于不同等級結構的產(chǎn)品。

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

優(yōu)點:1)可以在類的內(nèi)部對產(chǎn)品族中相關聯(lián)的多等級產(chǎn)品共同管理,而不必專門引入多個新的類來進行管理;2)當增加一個新的產(chǎn)品族時不需要修改原代碼,滿足開閉原則。缺點:當產(chǎn)品族中需要增加一個新等級的產(chǎn)品時,則所有的工廠類都需要進行修改。軟件設計模式(Java版)、作者:程細柱人民郵電出版社(和)3.2抽象工廠模式(AbstractFactory)模式(續(xù))3.2.2模式的結構與實現(xiàn)

1.模式的結構抽象工廠模式的主要角色有:1)抽象工廠(AbstractFactory):提供了創(chuàng)建產(chǎn)品的接口,它包含多個創(chuàng)建產(chǎn)品的方法newProduct(),可以創(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)建,它同具體工廠之間是多對一的關系。軟件設計模式(Java版)、作者:程細柱人民郵電出版社(和)3.2抽象工廠模式(AbstractFactory)模式(續(xù))3.2.2模式的結構與實現(xiàn)

1.模式的結構右邊是其結構圖:

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

//該模式的實現(xiàn)關鍵代碼見下一頁:軟件設計模式(Java版)、作者:程細柱人民郵電出版社(和)抽象工廠和具體工廠的代碼1)抽象工廠:提供了廠品的生成方法。interfaceAbstractFactory{ publicProduct1newProduct1();publicProduct2newProduct2();}Java面向?qū)ο蟪绦蛟O計(ISDN:9787564740634)、作者:程細柱電子科技大學出版社()37抽象工廠和具體工廠的代碼2)具體工廠:實現(xiàn)了廠品的生成方法。classConcreteFactory1implementsAbstractFactory{publicProduct1newProduct1(){ System.out.println("具體工廠1生成-->具體產(chǎn)品11..."); returnnewConcreteProduct11();}publicProduct2newProduct2(){ System.out.println("具體工廠1生成-->具體產(chǎn)品21..."); returnnewConcreteProduct21();}}Java面向?qū)ο蟪绦蛟O計(ISDN:9787564740634)、作者:程細柱電子科技大學出版社()383.2抽象工廠模式(AbstractFactory)模式(續(xù))3.2.3模式的應用實例

【例3.2】用抽象工廠模式設計農(nóng)場類。

分析:農(nóng)場中除了像畜牧場一樣可以養(yǎng)動物,還可以培養(yǎng)植物,如養(yǎng)馬、養(yǎng)牛、種菜、種水果等,所以本實例比前面介紹的畜牧場類復雜,必須用抽象工廠模式來實現(xiàn),右邊是其結構圖:

注:程序代碼見附件軟件設計模式(Java版)、作者:程細柱人民郵電出版社(和)3.2抽象工廠模式(AbstractFactory)模式(續(xù))3.2.3模式的應用實例

【例3.2】用抽象工廠模式設計農(nóng)場類。

右邊是程序的運行結果軟件設計模式(Java版)、作者:程細柱人民郵電出版社(和)3.2抽象工廠模式(AbstractFactory)模式(續(xù))3.2.4模式的應用場景抽象工廠模式通常適用以下場景:1)當需要創(chuàng)建的對象是一系列相互關聯(lián)或相互依賴的產(chǎn)品族時,如:電器工廠中的電視機、洗衣機、空調(diào)等。2)系統(tǒng)中有多個產(chǎn)品族,但每次只使用其中的某一族產(chǎn)品。如:有的粉絲只喜歡穿李寧牌的衣、褲和鞋。3)系統(tǒng)中提供了產(chǎn)品的類庫,且所有產(chǎn)品的接口相同,客戶端不依賴產(chǎn)品實例的創(chuàng)建細節(jié)和內(nèi)部結構。軟件設計模式(Java版)、作者:程細柱人民郵電出版社(和)3.2抽象工廠模式(AbstractFactory)模式(續(xù))3.2.5模式的擴展抽象工廠模式的擴展有一定的“開閉原則”傾斜性:1)當增加一個新的產(chǎn)品族時只需增加一個新的具體工廠,不需要修改原代碼,滿足開閉原則。2)當產(chǎn)品族中需要增加一個新種類的產(chǎn)品時,則所有的工廠類都需要進行修改,不滿足開閉原則。另一方面,當系統(tǒng)中只存在一個等級結構的產(chǎn)品時,抽象工廠模式將退化到工廠方法模式。軟件設計模式(Java版)、作者:程細柱人民郵電出版社(和)3.3建造者(Builder)模式

在軟件開發(fā)過程中有時需要創(chuàng)建一個復雜的對象,這個復雜對象通常由多個子部件按一定的步驟組合而成。如:電腦是由CPU、主板、內(nèi)存條、硬盤、顯卡、機箱、顯示器、鍵盤、鼠標等部件組裝而成的,采購員不可能自己去組裝電腦,而是將電腦的配置要求告訴老板,老板指揮技術人員去組裝電腦,然后再交給要買電腦的采購員。生活中這樣的例子很多,它們都是由多個部件構成的,各個部件可以靈活選擇,但其創(chuàng)建步驟都大同小異。這類產(chǎn)品的創(chuàng)建無法用前面介紹的工廠模式描述,只有建造者模式可以很好地描述該類產(chǎn)品的創(chuàng)建。軟件設計模式(Java版)、作者:程細柱人民郵電出版社(和)3.3建造者(Builder)模式(續(xù))3.3.1模式的定義與特點

定義:指將一個復雜對象的構造與它的表示分離,使同樣的構建過程可以創(chuàng)建不同的表示,這樣的設計模式被稱為建造者模式。它是將一個復雜的對象分解為多個簡單的對象,然后一步一步構建而成。

優(yōu)點:1)各個具體的建造者相互獨立的,有利于系統(tǒng)的擴展;2)客戶端不必知道產(chǎn)品內(nèi)部組成的細節(jié),便于控制細節(jié)風險。缺點:1)產(chǎn)品的組成部分必須相同,這限制了其使用范圍;2)如果產(chǎn)品的內(nèi)部變化復雜,該模式會增加很多的建造者類。軟件設計模式(Java版)、作者:程細柱人民郵電出版社(和)3.3建造者(Builder)模式(續(xù))3.3.2模式的結構與實現(xiàn)

1.模式的結構建造者模式的主要角色有:1)產(chǎn)品角色(Product):它是包含多個組成部件的復雜對象,由具體建造者來創(chuàng)建其各個組成部件。2)抽象建造者(Builder):是一個包含創(chuàng)建產(chǎn)品各個子部件的抽象方法的接口,它通常還包含一個返回復雜產(chǎn)品的方法getResult()。3)具體建造者(ConcreteBuilder):實現(xiàn)了Builder接口,完成復雜產(chǎn)品的各個部件的具體創(chuàng)建方法。

4)指揮者(Director):它調(diào)用建造者對象中的部件構造與裝配方法完成復雜對象的創(chuàng)建,在指揮者中不涉及具體產(chǎn)品的信息。軟件設計模式(Java版)、作者:程細柱人民郵電出版社(和)3.3建造者(Builder)模式(續(xù))3.3.2模式的結構與實現(xiàn)

1.模式的結構右邊是其結構圖:

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

//該模式的實現(xiàn)代碼見下頁:軟件設計模式(Java版)、作者:程細柱人民郵電出版社(和)3.3建造者(Builder)模式(續(xù))其相關類的的代碼如下:1)產(chǎn)品角色:是包含多個組成部件的復雜對象。

classProduct{privateStringpartA;privateStringpartB;privateStringpartC;publicvoidsetPartA(StringpartA){ this.partA=partA;}軟件設計模式(Java版)(ISDN:9787564740634)、作者:程細柱publicvoidsetPartB(StringpartB){ this.partB=partB;}publicvoidsetPartC(StringpartC){ this.partC=partC;}publicvoidshow(){//顯示產(chǎn)品的特性}}3.3建造者(Builder)模式(續(xù))2)抽象建造者:包含創(chuàng)建產(chǎn)品各個子部件的抽象方法。

abstractclassBuilder{

//創(chuàng)建產(chǎn)品對象protectedProductproduct=newProduct();publicabstractvoidbuildPartA();publicabstractvoidbuildPartB();publicabstractvoidbuildPartC();

//返回產(chǎn)品對象publicProductgetResult(){returnproduct;}}軟件設計模式(Java版)(ISDN:9787564740634)、作者:程細柱3.3建造者(Builder)模式(續(xù))3)具體建造者:實現(xiàn)了抽象建造者接口。

publicclassConcreteBuilderextendsBuilder{publicvoidbuildPartA(){product.setPartA("建造PartA");}publicvoidbuildPartB(){product.setPartA("建造PartB");}publicvoidbuildPartC(){product.setPartA("建造PartC");}}軟件設計模式(Java版)(ISDN:9787564740634)、作者:程細柱3.3建造者(Builder)模式(續(xù))4)指揮者:調(diào)用建造者中的方法完成復雜對象的創(chuàng)建。classDirector{privateBuilderbuilder;publicDirector(Builderbuilder){this.builder=builder;}publicProductconstruct(){//產(chǎn)品構建與組裝方法builder.buildPartA();builder.buildPartB();builder.buildPartC();

溫馨提示

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

最新文檔

評論

0/150

提交評論