




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
軟件設(shè)計(jì)模式之創(chuàng)建型模式創(chuàng)建型模式概述單例模式工廠方法模式抽象工廠模式建造者模式原型模式contents目錄01創(chuàng)建型模式概述定義:創(chuàng)建型模式主要關(guān)注對(duì)象的創(chuàng)建過(guò)程,旨在將對(duì)象的創(chuàng)建與使用代碼分離,提供靈活的對(duì)象創(chuàng)建方式。抽象了對(duì)象創(chuàng)建的細(xì)節(jié),使得代碼更加清晰和易于維護(hù)。提供了多種創(chuàng)建對(duì)象的方式,增加了系統(tǒng)的靈活性和可擴(kuò)展性。特點(diǎn)定義與特點(diǎn)解耦將對(duì)象的創(chuàng)建與使用代碼分離,降低了系統(tǒng)的耦合度。復(fù)用通過(guò)抽象創(chuàng)建過(guò)程,可以方便地復(fù)用已有的對(duì)象創(chuàng)建邏輯。擴(kuò)展性提供了可擴(kuò)展的框架,方便在系統(tǒng)中添加新的對(duì)象創(chuàng)建方式。創(chuàng)建型模式的重要性0102單例模式(Single…確保一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)。工廠方法模式(Fact…定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類。工廠方法使一個(gè)類的實(shí)例化延遲到其子類。抽象工廠模式(Abst…提供一個(gè)接口,用于創(chuàng)建相關(guān)或依賴對(duì)象的家族,而不需要明確指定具體類。建造者模式(Build…將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。原型模式(Protot…用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。030405創(chuàng)建型模式的分類02單例模式餓漢式在類加載時(shí)就完成了初始化,避免了線程同步問(wèn)題。雙重檢查鎖定通過(guò)雙重檢查鎖定機(jī)制實(shí)現(xiàn)線程安全的懶漢式單例模式。枚舉利用枚舉的特性實(shí)現(xiàn)單例模式,簡(jiǎn)潔且線程安全。定義單例模式是一種創(chuàng)建型設(shè)計(jì)模式,它確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)來(lái)獲取該實(shí)例。懶漢式在第一次調(diào)用時(shí)初始化,需要考慮線程安全問(wèn)題。靜態(tài)內(nèi)部類利用靜態(tài)內(nèi)部類的特性實(shí)現(xiàn)延遲加載和線程安全。010203040506定義與實(shí)現(xiàn)方式延遲加載,即在第一次使用時(shí)才創(chuàng)建實(shí)例。優(yōu)點(diǎn)是按需加載,缺點(diǎn)是存在線程安全問(wèn)題。在類加載時(shí)就創(chuàng)建實(shí)例。優(yōu)點(diǎn)是線程安全,缺點(diǎn)是無(wú)論是否使用都會(huì)創(chuàng)建實(shí)例,浪費(fèi)資源。懶漢式與餓漢式的比較餓漢式懶漢式線程安全問(wèn)題及解決方案使用synchronized關(guān)鍵字對(duì)方法進(jìn)行同步,確保同一時(shí)間只有一個(gè)線程可以訪問(wèn)該方法。解決方案問(wèn)題:在懶漢式實(shí)現(xiàn)中,如果多個(gè)線程同時(shí)訪問(wèn)單例類的靜態(tài)方法,可能會(huì)創(chuàng)建多個(gè)實(shí)例,從而破壞單例模式的約束。使用雙重檢查鎖定機(jī)制,在同步塊內(nèi)外分別檢查實(shí)例是否已經(jīng)創(chuàng)建,避免不必要的同步開(kāi)銷。使用靜態(tài)內(nèi)部類或枚舉實(shí)現(xiàn)單例模式,這些方式天然具有線程安全性。應(yīng)用場(chǎng)景與示例應(yīng)用場(chǎng)景數(shù)據(jù)庫(kù)連接池、線程池等資源池類設(shè)計(jì)。日志記錄器、配置管理類、全局狀態(tài)類等需要全局唯一實(shí)例的場(chǎng)景。數(shù)據(jù)庫(kù)連接池:通過(guò)單例模式確保整個(gè)應(yīng)用只有一個(gè)數(shù)據(jù)庫(kù)連接池實(shí)例,避免資源浪費(fèi)和連接泄露。日志記錄器:通過(guò)單例模式確保整個(gè)應(yīng)用使用同一個(gè)日志記錄器實(shí)例,方便統(tǒng)一管理和控制日志輸出。示例03工廠方法模式定義工廠方法模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種創(chuàng)建對(duì)象的接口,但具體創(chuàng)建的對(duì)象類型可以在子類中進(jìn)行指定。實(shí)現(xiàn)方式在工廠方法模式中,通常抽象出一個(gè)工廠類,該類聲明了創(chuàng)建對(duì)象的方法,但具體實(shí)現(xiàn)留給子類完成。子類通過(guò)實(shí)現(xiàn)這個(gè)方法,來(lái)指定具體要?jiǎng)?chuàng)建的對(duì)象類型。定義與實(shí)現(xiàn)方式123優(yōu)點(diǎn)實(shí)現(xiàn)了創(chuàng)建對(duì)象與使用對(duì)象的分離,降低了系統(tǒng)的耦合度。具有良好的擴(kuò)展性,當(dāng)需要增加新的產(chǎn)品時(shí),只需要增加相應(yīng)的具體工廠和具體產(chǎn)品類即可。工廠方法模式的優(yōu)缺點(diǎn)符合開(kāi)閉原則,對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。工廠方法模式的優(yōu)缺點(diǎn)03有時(shí)可能需要引入抽象層,增加了實(shí)現(xiàn)的復(fù)雜性。01缺點(diǎn)02增加了系統(tǒng)的類個(gè)數(shù),一定程度上增加了系統(tǒng)的復(fù)雜性和理解難度。工廠方法模式的優(yōu)缺點(diǎn)簡(jiǎn)單工廠模式是通過(guò)一個(gè)專門的類來(lái)負(fù)責(zé)創(chuàng)建其他類的實(shí)例,這個(gè)專門的類稱為“工廠類”??蛻舳酥恍枰肋@個(gè)工廠類,而不需要知道具體的產(chǎn)品類。但是簡(jiǎn)單工廠模式違反了開(kāi)閉原則,當(dāng)需要增加新的產(chǎn)品時(shí),需要修改工廠類的代碼。簡(jiǎn)單工廠模式工廠方法模式是對(duì)簡(jiǎn)單工廠模式的進(jìn)一步抽象化,它克服了簡(jiǎn)單工廠模式中違反開(kāi)閉原則的缺點(diǎn),又保持了封裝對(duì)象創(chuàng)建過(guò)程的優(yōu)點(diǎn)。在工廠方法模式中,客戶端需要知道具體工廠類才能創(chuàng)建對(duì)象,這增加了客戶端的復(fù)雜性,但是提高了系統(tǒng)的可擴(kuò)展性。工廠方法模式與簡(jiǎn)單工廠模式的比較應(yīng)用場(chǎng)景當(dāng)一個(gè)類不知道它所必須創(chuàng)建的對(duì)象的類的時(shí)候。當(dāng)一個(gè)類希望由它的子類來(lái)指定它所創(chuàng)建的對(duì)象的時(shí)候。應(yīng)用場(chǎng)景與示例當(dāng)需要將創(chuàng)建對(duì)象的職責(zé)委托給多個(gè)幫助子類中的某一個(gè),以便客戶端可以使用子類來(lái)指定創(chuàng)建對(duì)象的具體類型的時(shí)候。示例:以汽車制造為例,可以抽象出一個(gè)汽車工廠接口`CarFactory`,其中聲明了制造汽車的方法`createCar()`。然后針對(duì)不同的汽車品牌(如寶馬、奔馳等),分別實(shí)現(xiàn)這個(gè)接口,并在實(shí)現(xiàn)類中指定具體的汽車類型??蛻舳嗽谑褂脮r(shí),只需要知道具體的汽車工廠,就可以制造出相應(yīng)的汽車。應(yīng)用場(chǎng)景與示例04抽象工廠模式VS抽象工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種方式來(lái)封裝一組具有共同主題的單個(gè)工廠,而不需要指定它們的具體類。實(shí)現(xiàn)方式抽象工廠模式通常通過(guò)定義一個(gè)抽象工廠接口來(lái)實(shí)現(xiàn),該接口聲明了一組用于創(chuàng)建相關(guān)或依賴對(duì)象的工廠方法。然后,具體工廠類實(shí)現(xiàn)該接口以提供具體的產(chǎn)品對(duì)象??蛻舳舜a通過(guò)調(diào)用抽象工廠的方法來(lái)獲取產(chǎn)品對(duì)象,而無(wú)需了解具體產(chǎn)品類的信息。定義定義與實(shí)現(xiàn)方式抽象工廠模式的優(yōu)缺點(diǎn)封裝性抽象工廠模式將具體產(chǎn)品的創(chuàng)建過(guò)程封裝在工廠類中,客戶端代碼無(wú)需了解具體產(chǎn)品的實(shí)現(xiàn)細(xì)節(jié),降低了系統(tǒng)的耦合度??蓴U(kuò)展性當(dāng)需要增加新的產(chǎn)品族時(shí),只需增加新的具體工廠類和對(duì)應(yīng)的具體產(chǎn)品類,而無(wú)需修改現(xiàn)有代碼,符合開(kāi)閉原則。抽象工廠模式的優(yōu)缺點(diǎn)一致性:抽象工廠模式可以確保客戶端始終使用同一產(chǎn)品族中的產(chǎn)品,保證了系統(tǒng)的一致性。抽象工廠模式的優(yōu)缺點(diǎn)抽象工廠模式對(duì)于支持新種類的產(chǎn)品較為困難,因?yàn)樾枰薷某橄蠊S的接口以及所有具體工廠的實(shí)現(xiàn)。難以支持新種類的產(chǎn)品當(dāng)產(chǎn)品族中產(chǎn)品種類較多時(shí),會(huì)導(dǎo)致系統(tǒng)復(fù)雜度增加,因?yàn)樾枰S護(hù)大量的具體工廠類和具體產(chǎn)品類。系統(tǒng)復(fù)雜度增加不同點(diǎn)工廠方法模式針對(duì)的是一個(gè)產(chǎn)品等級(jí)結(jié)構(gòu),而抽象工廠模式針對(duì)的是多個(gè)產(chǎn)品等級(jí)結(jié)構(gòu)。抽象工廠模式比工廠方法模式更加復(fù)雜,因?yàn)樗枰幚矶鄠€(gè)產(chǎn)品族和產(chǎn)品等級(jí)結(jié)構(gòu)的問(wèn)題。工廠方法模式的具體工廠類負(fù)責(zé)創(chuàng)建一個(gè)具體產(chǎn)品,而抽象工廠模式的具體工廠類負(fù)責(zé)創(chuàng)建一組相關(guān)或依賴的產(chǎn)品。共同點(diǎn):兩種模式都屬于創(chuàng)建型設(shè)計(jì)模式,都用于創(chuàng)建對(duì)象,且都降低了客戶端代碼與具體產(chǎn)品類之間的耦合度。與工廠方法模式的比較應(yīng)用場(chǎng)景當(dāng)系統(tǒng)需要提供多個(gè)產(chǎn)品族,且每個(gè)產(chǎn)品族包含多個(gè)相關(guān)產(chǎn)品時(shí),可以使用抽象工廠模式。當(dāng)系統(tǒng)需要根據(jù)不同的環(huán)境或條件創(chuàng)建不同種類的產(chǎn)品時(shí),可以使用抽象工廠模式。示例:以汽車制造為例,一個(gè)汽車制造廠可能生產(chǎn)多種類型的汽車(如轎車、SUV等),每種類型的汽車又有不同的配置(如發(fā)動(dòng)機(jī)、輪胎等)。這時(shí)可以使用抽象工廠模式來(lái)設(shè)計(jì)汽車制造系統(tǒng)。具體實(shí)現(xiàn)時(shí),可以定義一個(gè)抽象汽車工廠接口,聲明創(chuàng)建各種類型汽車的方法;然后實(shí)現(xiàn)多個(gè)具體汽車工廠類,分別負(fù)責(zé)創(chuàng)建不同配置的汽車;最后客戶端代碼通過(guò)調(diào)用抽象汽車工廠的方法來(lái)獲取所需的汽車對(duì)象。應(yīng)用場(chǎng)景與示例05建造者模式定義建造者模式是一種創(chuàng)建型設(shè)計(jì)模式,它允許你在構(gòu)建復(fù)雜對(duì)象時(shí)分步進(jìn)行,并且可以在構(gòu)建過(guò)程中更改對(duì)象的表示。要點(diǎn)一要點(diǎn)二實(shí)現(xiàn)方式建造者模式通常包括四個(gè)主要組成部分:產(chǎn)品(Product)、抽象建造者(AbstractBuilder)、具體建造者(ConcreteBuilder)和導(dǎo)演(Director)。其中,產(chǎn)品是要構(gòu)建的對(duì)象,抽象建造者定義了構(gòu)建產(chǎn)品所需的接口,具體建造者實(shí)現(xiàn)了抽象建造者的接口以構(gòu)建產(chǎn)品,而導(dǎo)演則負(fù)責(zé)協(xié)調(diào)具體建造者的工作以構(gòu)建出最終的產(chǎn)品。定義與實(shí)現(xiàn)方式建造者模式的優(yōu)缺點(diǎn)01優(yōu)點(diǎn)02可以分步構(gòu)建復(fù)雜對(duì)象,使得構(gòu)建過(guò)程更加清晰和易于理解??梢苑奖愕馗膶?duì)象的表示,因?yàn)閷?duì)象的構(gòu)建過(guò)程被封裝在了具體建造者中。03建造者模式的優(yōu)缺點(diǎn)如果產(chǎn)品的內(nèi)部結(jié)構(gòu)非常復(fù)雜,那么需要定義很多具體的建造者類,這會(huì)增加系統(tǒng)的復(fù)雜性。如果產(chǎn)品的構(gòu)建過(guò)程需要依賴于其他對(duì)象,那么需要在具體建造者中注入這些依賴,這可能會(huì)增加構(gòu)建的復(fù)雜性。缺點(diǎn)建造者模式的優(yōu)缺點(diǎn)兩種模式都是創(chuàng)建型模式,都用于創(chuàng)建對(duì)象。抽象工廠模式用于創(chuàng)建一系列相關(guān)或互相依賴的對(duì)象,而不需要指定它們具體的類;而建造者模式則用于構(gòu)建復(fù)雜對(duì)象,并且可以在構(gòu)建過(guò)程中更改對(duì)象的表示。相似之處不同之處與抽象工廠模式的比較當(dāng)需要構(gòu)建的對(duì)象比較復(fù)雜,且構(gòu)建過(guò)程需要分步驟進(jìn)行時(shí),可以考慮使用建造者模式。例如,構(gòu)建一個(gè)包含多個(gè)部件的復(fù)雜設(shè)備或構(gòu)建一個(gè)包含多個(gè)字段的復(fù)雜數(shù)據(jù)結(jié)構(gòu)。應(yīng)用場(chǎng)景以構(gòu)建一個(gè)包含多個(gè)字段的復(fù)雜數(shù)據(jù)結(jié)構(gòu)為例,可以使用建造者模式來(lái)分步構(gòu)建該數(shù)據(jù)結(jié)構(gòu)。首先定義一個(gè)抽象建造者接口,該接口包含構(gòu)建數(shù)據(jù)結(jié)構(gòu)所需的方法;然后定義一個(gè)具體建造者類來(lái)實(shí)現(xiàn)該接口,并在該類中分步構(gòu)建數(shù)據(jù)結(jié)構(gòu);最后定義一個(gè)導(dǎo)演類來(lái)協(xié)調(diào)具體建造者的工作,以構(gòu)建出最終的數(shù)據(jù)結(jié)構(gòu)。客戶端可以通過(guò)調(diào)用導(dǎo)演類的方法來(lái)獲取構(gòu)建好的數(shù)據(jù)結(jié)構(gòu)。示例應(yīng)用場(chǎng)景與示例06原型模式定義原型模式是一種創(chuàng)建型設(shè)計(jì)模式,它允許通過(guò)復(fù)制(或克?。┮粋€(gè)已有對(duì)象來(lái)創(chuàng)建一個(gè)新對(duì)象,而無(wú)需重新實(shí)例化。實(shí)現(xiàn)方式在原型模式中,通常需要實(shí)現(xiàn)一個(gè)原型接口或抽象類,其中包含一個(gè)克隆方法。具體原型類實(shí)現(xiàn)該接口或抽象類,并實(shí)現(xiàn)克隆方法以返回一個(gè)新對(duì)象??蛻舳丝梢酝ㄟ^(guò)調(diào)用原型對(duì)象的克隆方法來(lái)創(chuàng)建新對(duì)象。定義與實(shí)現(xiàn)方式010405060302優(yōu)點(diǎn)提高性能:通過(guò)復(fù)制已有對(duì)象來(lái)創(chuàng)建新對(duì)象,避免了重新實(shí)例化的開(kāi)銷。簡(jiǎn)化創(chuàng)建過(guò)程:客戶端無(wú)需了解對(duì)象的創(chuàng)建細(xì)節(jié),只需調(diào)用克隆方法即可。缺點(diǎn)深拷貝問(wèn)題:當(dāng)對(duì)象包含引用類型屬性時(shí),需要實(shí)現(xiàn)深拷貝以確??寺?duì)象的獨(dú)立性。破壞封裝性:客戶端可以訪問(wèn)并修改原型對(duì)象的內(nèi)部狀態(tài),可能導(dǎo)致封裝性被破壞。原型模式的優(yōu)缺點(diǎn)淺拷貝只復(fù)制對(duì)象的基本數(shù)據(jù)類型屬性,對(duì)于引用類型屬性則只復(fù)制引用。因此,淺拷貝得到的對(duì)象與原對(duì)象共享引用類型屬性。深拷貝不僅復(fù)制對(duì)象的基本數(shù)據(jù)類型屬性,還遞
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 健康管理公司合同范例
- 雙經(jīng)銷合同范本
- 單位裝修工程合同范本
- 銷售藥膏合同范本
- 2025年太陽(yáng)能發(fā)電機(jī)組項(xiàng)目合作計(jì)劃書
- 各類合同范本超全
- 合同范本紙制
- 商鋪的出租合同范本
- 承接糧庫(kù)工程合同范本
- 廠房設(shè)備合同范例
- (完整word版)新《中華頌》朗誦稿
- 糖尿病健康教育及飲食指導(dǎo)
- PFMEA模板完整版文檔
- 三無(wú)曲線(有緩)繩正法撥道自動(dòng)計(jì)算表
- 教學(xué)能力比賽決賽 《英語(yǔ)》教案
- 《母雞》課件 王崧舟 千課萬(wàn)人 (圖片版不可編輯)
- 離婚糾紛證據(jù)清單
- 臨床三基考試題庫(kù)臨床醫(yī)師三基考試題庫(kù)
- 商貿(mào)公司企業(yè)范文
- 第一章《原子結(jié)構(gòu)與性質(zhì)》測(cè)試卷-高二化學(xué)人教版(2019)選擇性必修2
- YY/T 1761-2021透析管路消毒液
評(píng)論
0/150
提交評(píng)論