国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

做外貿(mào)網(wǎng)站詐騙株洲seo優(yōu)化哪家好

做外貿(mào)網(wǎng)站詐騙,株洲seo優(yōu)化哪家好,W7如何安裝WordPress,免費(fèi)建站網(wǎng)站建設(shè)本系列文章簡(jiǎn)介: 設(shè)計(jì)模式是在軟件開(kāi)發(fā)過(guò)程中,經(jīng)過(guò)實(shí)踐和總結(jié)得到的一套解決特定問(wèn)題的可復(fù)用的模板。它是一種在特定情境中經(jīng)過(guò)驗(yàn)證的經(jīng)驗(yàn)和技巧的集合,可以幫助開(kāi)發(fā)人員設(shè)計(jì)出高效、可維護(hù)、可擴(kuò)展和可復(fù)用的軟件系統(tǒng)。設(shè)計(jì)模式提供了一種在…

本系列文章簡(jiǎn)介:

????????設(shè)計(jì)模式是在軟件開(kāi)發(fā)過(guò)程中,經(jīng)過(guò)實(shí)踐和總結(jié)得到的一套解決特定問(wèn)題的可復(fù)用的模板。它是一種在特定情境中經(jīng)過(guò)驗(yàn)證的經(jīng)驗(yàn)和技巧的集合,可以幫助開(kāi)發(fā)人員設(shè)計(jì)出高效、可維護(hù)、可擴(kuò)展和可復(fù)用的軟件系統(tǒng)。設(shè)計(jì)模式提供了一種在設(shè)計(jì)和編碼過(guò)程中的指導(dǎo),它用于解決常見(jiàn)的設(shè)計(jì)問(wèn)題,并提供了一種標(biāo)準(zhǔn)化的方案。設(shè)計(jì)模式能夠幫助開(kāi)發(fā)人員降低系統(tǒng)的復(fù)雜性,提高代碼的可讀性和可維護(hù)性。本系列文章將詳細(xì)講解Java中的23中設(shè)計(jì)模式?,并配有圖文解析及相應(yīng)的代碼示例,歡迎大家訂閱《Java技術(shù)棧高級(jí)攻略》專欄,一起學(xué)習(xí),一起漲分!? ? ?

目錄

1、引言

2、設(shè)計(jì)模式概述

3、設(shè)計(jì)模式的基本要素

4、設(shè)計(jì)模式分類

4.1?創(chuàng)建型模式(Creational)

4.2?結(jié)構(gòu)型模式(Structural)

4.3?行為型模式(Behavioral)

5、設(shè)計(jì)模式概覽

6、設(shè)計(jì)模式詳解

6.1?創(chuàng)建型模式(Creational)

6.1.1 工廠模式(Factory Pattern)

6.1.1.1 簡(jiǎn)介

?6.1.1.2? 優(yōu)缺點(diǎn)

?6.1.1.3??使用場(chǎng)景

?6.1.1.4??使用案例

6.1.2?抽象工廠模式(Abstract Factory Pattern)

6.1.2.1 簡(jiǎn)介

6.1.2.2?優(yōu)缺點(diǎn)

6.1.2.3?使用場(chǎng)景

6.1.2.4?使用案例

6.1.3?單例模式(Singleton Pattern)

6.1.3.1 簡(jiǎn)介

6.1.3.2?優(yōu)缺點(diǎn)

6.1.3.3?使用場(chǎng)景

6.1.3.4?使用案例

6.1.4?建造者模式(Builder Pattern)

6.1.4.1 簡(jiǎn)介

6.1.4.2?優(yōu)缺點(diǎn)

6.1.4.3?使用場(chǎng)景

6.1.4.4?使用案例

6.1.5?原型模式(Prototype Pattern)

6.1.5.1 簡(jiǎn)介

6.1.5.2?優(yōu)缺點(diǎn)

6.1.5.3?使用場(chǎng)景

6.1.5.4?使用案例

6.2?結(jié)構(gòu)型模式(Structural)

6.3?行為型模式(Behavioral)

7、結(jié)語(yǔ)


1、引言

????????設(shè)計(jì)模式是一種解決常見(jiàn)軟件設(shè)計(jì)問(wèn)題的經(jīng)驗(yàn)總結(jié),它提供了一套可重用的設(shè)計(jì)思想和方法,幫助開(kāi)發(fā)人員更好地組織和設(shè)計(jì)他們的代碼。在軟件開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到一些常見(jiàn)的問(wèn)題,比如如何實(shí)現(xiàn)代碼的靈活性、可擴(kuò)展性、可維護(hù)性和可復(fù)用性,以及如何減少代碼的耦合性等。設(shè)計(jì)模式通過(guò)定義一些通用的解決方案來(lái)解決這些問(wèn)題,從而提高代碼的質(zhì)量和可維護(hù)性。

????????設(shè)計(jì)模式的概念最早由四位名為Gang of Four(GoF)的作者提出,他們?cè)凇对O(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》一書(shū)中總結(jié)了23種常見(jiàn)的設(shè)計(jì)模式。這些設(shè)計(jì)模式包括創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式,它們分別用于解決對(duì)象創(chuàng)建、對(duì)象組合和對(duì)象交互等問(wèn)題。每個(gè)設(shè)計(jì)模式都有其固定的結(jié)構(gòu)和用法,開(kāi)發(fā)人員可以根據(jù)具體的問(wèn)題選擇合適的設(shè)計(jì)模式來(lái)解決。

????????本文將介紹這23種常見(jiàn)的設(shè)計(jì)模式,詳細(xì)解釋它們的原理、應(yīng)用場(chǎng)景和使用方法。通過(guò)學(xué)習(xí)這些設(shè)計(jì)模式,開(kāi)發(fā)人員可以更好地理解軟件設(shè)計(jì)的原則和思想,提高自己的設(shè)計(jì)能力和編碼水平。設(shè)計(jì)模式不僅是一種編碼技巧,更是一種思維方式和設(shè)計(jì)原則的體現(xiàn)。希望通過(guò)本文的介紹,讀者能夠更好地掌握和應(yīng)用設(shè)計(jì)模式,寫(xiě)出更優(yōu)雅、可擴(kuò)展和可維護(hù)的代碼。

2、設(shè)計(jì)模式概述

????????設(shè)計(jì)模式是一種解決問(wèn)題的可復(fù)用的設(shè)計(jì)思路,它提供了一套經(jīng)驗(yàn)豐富且經(jīng)過(guò)驗(yàn)證的解決方案。設(shè)計(jì)模式可以幫助開(kāi)發(fā)人員在軟件開(kāi)發(fā)過(guò)程中更加靈活、高效地解決常見(jiàn)問(wèn)題,并提高代碼的可維護(hù)性和可擴(kuò)展性。設(shè)計(jì)模式提供了一種標(biāo)準(zhǔn)化和結(jié)構(gòu)化的方法來(lái)解決一些常見(jiàn)的設(shè)計(jì)問(wèn)題,使得代碼更易于理解和維護(hù)。

3、設(shè)計(jì)模式的基本要素

設(shè)計(jì)模式的基本要素包括:

  1. 模式名稱:設(shè)計(jì)模式通常以一個(gè)或多個(gè)詞來(lái)描述模式的目的和特征。

  2. 問(wèn)題描述:模式描述了一個(gè)常見(jiàn)的問(wèn)題或場(chǎng)景,涉及到解決特定問(wèn)題時(shí)的需求和約束條件。

  3. 解決方案:模式描述了一個(gè)通用的解決方案,用于解決特定問(wèn)題或滿足特定需求。

  4. 結(jié)構(gòu):模式描述了解決方案的組成部分和它們之間的關(guān)系。

  5. 參與者:模式描述了解決方案中的角色和它們之間的通信和協(xié)作關(guān)系。

  6. 協(xié)作:模式描述了參與者之間如何協(xié)同工作來(lái)達(dá)到特定目的。

  7. 效果:模式描述了解決方案帶來(lái)的優(yōu)點(diǎn)和可能的缺點(diǎn)。

  8. 相關(guān)模式:模式描述了該模式與其他模式之間的關(guān)系和相互作用。

  9. 示例代碼:模式通常會(huì)提供一個(gè)或多個(gè)示例代碼,用于演示如何實(shí)現(xiàn)和使用該模式。

  10. 應(yīng)用場(chǎng)景:模式描述了適用該模式的問(wèn)題或場(chǎng)景,并提供了一些使用該模式的示例場(chǎng)景。

這些要素共同描述了一個(gè)設(shè)計(jì)模式的目的、解決方案和應(yīng)用方式,幫助開(kāi)發(fā)人員更好地理解和應(yīng)用設(shè)計(jì)模式。

4、設(shè)計(jì)模式分類

????????設(shè)計(jì)模式是解決軟件設(shè)計(jì)中常見(jiàn)問(wèn)題的典型解決方案的規(guī)范化描述。根據(jù)問(wèn)題和解決方案的不同,設(shè)計(jì)模式可以分為三大類:創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式。

4.1?創(chuàng)建型模式(Creational)

創(chuàng)建型模式是一種軟件設(shè)計(jì)模式,它提供了一種創(chuàng)建對(duì)象的機(jī)制,可以根據(jù)需要?jiǎng)討B(tài)地創(chuàng)建對(duì)象,而無(wú)需直接實(shí)例化對(duì)象。

創(chuàng)建型模式包括以下幾種:

  1. 工廠模式(Factory Pattern):定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪個(gè)類。工廠方法使一個(gè)類的實(shí)例化延遲到子類。

  2. 抽象工廠模式(Abstract Factory Pattern):提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無(wú)需指定它們具體的類。

  3. 單例模式(Singleton Pattern):保證一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)。

  4. 建造者模式(Builder Pattern):將一個(gè)復(fù)雜對(duì)象的構(gòu)建過(guò)程與其表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。

  5. 原型模式(Prototype Pattern):通過(guò)復(fù)制現(xiàn)有對(duì)象來(lái)創(chuàng)建新對(duì)象,而不是使用構(gòu)造函數(shù)。

這些模式的目的都是提供一種靈活的方式來(lái)創(chuàng)建對(duì)象,使得系統(tǒng)更加可擴(kuò)展和可維護(hù)。通過(guò)使用這些模式,可以將對(duì)象的創(chuàng)建過(guò)程和使用過(guò)程分離,降低耦合性,提高代碼的復(fù)用性和可測(cè)試性。

4.2?結(jié)構(gòu)型模式Structural

結(jié)構(gòu)型模式是設(shè)計(jì)模式的一種,用于解決對(duì)象之間的組合、關(guān)聯(lián)和結(jié)構(gòu)的問(wèn)題。結(jié)構(gòu)型模式可以幫助我們?cè)O(shè)計(jì)和組織類、對(duì)象和系統(tǒng)的結(jié)構(gòu),以便于更好地實(shí)現(xiàn)系統(tǒng)的功能。

常見(jiàn)的結(jié)構(gòu)型模式包括以下幾種:

  1. 適配器模式(Adapter Pattern):用于將一個(gè)類的接口轉(zhuǎn)換成客戶端所期望的另一種接口。

  2. 橋接模式(Bridge Pattern):將抽象部分與實(shí)現(xiàn)部分分離,使它們可以獨(dú)立變化。

  3. 組合模式(Composite Pattern):將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。

  4. 裝飾器模式(Decorator Pattern):動(dòng)態(tài)地給對(duì)象添加額外的職責(zé)。

  5. 外觀模式(Facade Pattern):提供一個(gè)統(tǒng)一的接口,用于訪問(wèn)子系統(tǒng)中的一群接口。

  6. 享元模式(Flyweight Pattern):使用共享對(duì)象可有效地支持大量的細(xì)粒度的對(duì)象。

  7. 代理模式(Proxy Pattern):為其他對(duì)象提供一個(gè)代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn)。

這些結(jié)構(gòu)型模式可以根據(jù)不同的情況選擇使用,以解決特定的設(shè)計(jì)問(wèn)題。

4.3?行為型模式(Behavioral)

行為型模式是軟件設(shè)計(jì)中的一種設(shè)計(jì)模式,用于描述對(duì)象之間的相互作用和通信方式。行為型模式關(guān)注的是對(duì)象的行為和責(zé)任的分配,以及對(duì)象之間的相互關(guān)系,實(shí)現(xiàn)對(duì)象之間的松耦合。

常見(jiàn)的行為型模式包括:

  1. 解釋器模式(Interpreter Pattern):給定一個(gè)語(yǔ)言,定義其文法的一種表示,并定義一個(gè)解釋器,用來(lái)解釋該語(yǔ)言中的句子。

  2. 模板方法模式(Template Method Pattern):一種行為型設(shè)計(jì)模式,它定義了一個(gè)算法的骨架,將一些步驟的具體實(shí)現(xiàn)延遲到子類中。模板方法使得子類可以在不改變算法結(jié)構(gòu)的情況下,重新定義某些步驟的實(shí)現(xiàn)。

  3. 觀察者模式(Observer Pattern):定義了一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都會(huì)被通知并自動(dòng)更新。

  4. 策略模式(Strategy Pattern):定義了一系列的算法,并將其封裝成獨(dú)立的對(duì)象,使得它們可以互相替換。策略模式使得算法可以獨(dú)立于客戶端而變化。

  5. 命令模式(Command Pattern):將請(qǐng)求封裝成對(duì)象,使得可以將請(qǐng)求的發(fā)送者和接收者解耦,實(shí)現(xiàn)請(qǐng)求的發(fā)送者和接收者之間的松耦合。

  6. 職責(zé)鏈模式(Chain of Responsibility Pattern):將請(qǐng)求的發(fā)送者和接收者解耦,使多個(gè)對(duì)象都有機(jī)會(huì)處理該請(qǐng)求,將這些對(duì)象串成一條鏈,并沿著這條鏈傳遞該請(qǐng)求,直到有對(duì)象處理它。

  7. 迭代器模式(Iterator Pattern):提供一種訪問(wèn)一個(gè)容器對(duì)象中各個(gè)元素的方式,而不需要暴露該對(duì)象的內(nèi)部表示。

  8. 中介者模式(Mediator Pattern):用一個(gè)中介對(duì)象封裝一系列對(duì)象的交互,中介者使各個(gè)對(duì)象不需要顯式地相互引用,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互。

  9. 備忘錄模式(Memento Pattern):在不破壞封裝性的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài)。這樣以后就可以把該對(duì)象恢復(fù)到之前的狀態(tài)。

  10. 狀態(tài)模式(State Pattern):允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變其行為,對(duì)象看起來(lái)似乎修改了其類。

  11. 訪問(wèn)者模式(Visitor Pattern):表示一個(gè)作用于某對(duì)象結(jié)構(gòu)中的各元素的操作,可以在不改變這些元素的類的前提下定義新的操作。

5、設(shè)計(jì)模式概覽

java中23種設(shè)計(jì)模式概覽

模型分類范圍? ? ?模式名稱模式描述
創(chuàng)建型

工廠模式

(Factory Pattern)

定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪個(gè)類。工廠方法使一個(gè)類的實(shí)例化延遲到子類。

對(duì)象
?

抽象工廠模式

(Abstract Factory Pattern)

提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無(wú)需指定它們具體的類。

單例模式

(Singleton Pattern)

保證一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)。

建造者模式

(Builder Pattern)

將一個(gè)復(fù)雜對(duì)象的構(gòu)建過(guò)程與其表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。

原型模式

(Prototype Pattern)

通過(guò)復(fù)制現(xiàn)有對(duì)象來(lái)創(chuàng)建新對(duì)象,而不是使用構(gòu)造函數(shù)。
結(jié)構(gòu)型

適配器模式

(Adapter Pattern)

用于將一個(gè)類的接口轉(zhuǎn)換成客戶端所期望的另一種接口。
對(duì)象

橋接模式

(Bridge Pattern)

將抽象部分與實(shí)現(xiàn)部分分離,使它們可以獨(dú)立變化。

組合模式

(Composite Pattern)

將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。

裝飾器模式

(Decorator Pattern)

動(dòng)態(tài)地給對(duì)象添加額外的職責(zé)。

外觀模式

(Facade Pattern)

提供一個(gè)統(tǒng)一的接口,用于訪問(wèn)子系統(tǒng)中的一群接口。

享元模式

(Flyweight Pattern)

使用共享對(duì)象可有效地支持大量的細(xì)粒度的對(duì)象。

代理模式

(Proxy Pattern)

為其他對(duì)象提供一個(gè)代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn)。
行為型

解釋器模式

(Interpreter Pattern)

給定一個(gè)語(yǔ)言,定義其文法的一種表示,并定義一個(gè)解釋器,用來(lái)解釋該語(yǔ)言中的句子。

模板方法模式

(Template Method Pattern)

一種行為型設(shè)計(jì)模式,它定義了一個(gè)算法的骨架,將一些步驟的具體實(shí)現(xiàn)延遲到子類中。模板方法使得子類可以在不改變算法結(jié)構(gòu)的情況下,重新定義某些步驟的實(shí)現(xiàn)。
對(duì)象

觀察者模式

(Observer Pattern)

定義了一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都會(huì)被通知并自動(dòng)更新。

策略模式

(Strategy Pattern)

定義了一系列的算法,并將其封裝成獨(dú)立的對(duì)象,使得它們可以互相替換。策略模式使得算法可以獨(dú)立于客戶端而變化。

命令模式

(Command Pattern)

將請(qǐng)求封裝成對(duì)象,使得可以將請(qǐng)求的發(fā)送者和接收者解耦,實(shí)現(xiàn)請(qǐng)求的發(fā)送者和接收者之間的松耦合。

職責(zé)鏈模式

(Chain of Responsibility Pattern)

將請(qǐng)求的發(fā)送者和接收者解耦,使多個(gè)對(duì)象都有機(jī)會(huì)處理該請(qǐng)求,將這些對(duì)象串成一條鏈,并沿著這條鏈傳遞該請(qǐng)求,直到有對(duì)象處理它。

迭代器模式

(Iterator Pattern)

提供一種訪問(wèn)一個(gè)容器對(duì)象中各個(gè)元素的方式,而不需要暴露該對(duì)象的內(nèi)部表示。

中介者模式

(Mediator Pattern)

用一個(gè)中介對(duì)象封裝一系列對(duì)象的交互,中介者使各個(gè)對(duì)象不需要顯式地相互引用,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互。

備忘錄模式

(Memento Pattern)

在不破壞封裝性的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài)。這樣以后就可以把該對(duì)象恢復(fù)到之前的狀態(tài)。

狀態(tài)模式

(State Pattern)

允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變其行為,對(duì)象看起來(lái)似乎修改了其類。

訪問(wèn)者模式

(Visitor Pattern)

表示一個(gè)作用于某對(duì)象結(jié)構(gòu)中的各元素的操作,可以在不改變這些元素的類的前提下定義新的操作。

6、設(shè)計(jì)模式詳解

6.1?創(chuàng)建型模式(Creational)

6.1.1 工廠模式(Factory Pattern)

6.1.1.1 簡(jiǎn)介

????????工廠模式是一種創(chuàng)建對(duì)象的設(shè)計(jì)模式,它通過(guò)定義一個(gè)工廠類來(lái)創(chuàng)建對(duì)象實(shí)例,而不是通過(guò)直接調(diào)用構(gòu)造函數(shù)來(lái)創(chuàng)建對(duì)象。工廠模式將對(duì)象的創(chuàng)建過(guò)程封裝在工廠類中,客戶端只需要通過(guò)工廠類來(lái)創(chuàng)建對(duì)象,而不需要了解對(duì)象的具體實(shí)現(xiàn)細(xì)節(jié)。

????????工廠模式可以將對(duì)象的創(chuàng)建與使用分離,提供了一種靈活的方式來(lái)創(chuàng)建對(duì)象。它可以根據(jù)實(shí)際的需求來(lái)選擇具體的對(duì)象實(shí)現(xiàn),并且可以隨時(shí)更換對(duì)象的實(shí)現(xiàn),而不影響客戶端的代碼。

????????在工廠模式中,通常有一個(gè)抽象工廠類,該類定義了創(chuàng)建對(duì)象的接口,具體的對(duì)象創(chuàng)建由具體的工廠子類來(lái)實(shí)現(xiàn)。客戶端通過(guò)調(diào)用工廠類的方法來(lái)創(chuàng)建對(duì)象,而不需要直接調(diào)用構(gòu)造函數(shù)。這樣可以將對(duì)象的創(chuàng)建過(guò)程集中在工廠類中,方便管理和維護(hù)。

????????工廠模式可以根據(jù)具體的需求來(lái)創(chuàng)建不同類型的對(duì)象,例如創(chuàng)建數(shù)據(jù)庫(kù)連接、創(chuàng)建窗口控件、創(chuàng)建日志對(duì)象等。它能夠提供一種統(tǒng)一的接口來(lái)創(chuàng)建對(duì)象,方便擴(kuò)展和修改對(duì)象的實(shí)現(xiàn),同時(shí)也提高了代碼的可維護(hù)性和可讀性。

?6.1.1.2? 優(yōu)缺點(diǎn)

工廠模式的優(yōu)點(diǎn):

  1. 降低代碼耦合度:工廠模式將對(duì)象的創(chuàng)建和使用分離,客戶端只需要知道工廠接口,而不需要知道具體的產(chǎn)品實(shí)現(xiàn)類,降低了代碼的耦合度。
  2. 簡(jiǎn)化對(duì)象創(chuàng)建過(guò)程:通過(guò)工廠模式,可以隱藏對(duì)象創(chuàng)建的細(xì)節(jié),客戶端只需要調(diào)用工廠方法即可獲得所需的對(duì)象,簡(jiǎn)化了對(duì)象創(chuàng)建過(guò)程。
  3. 擴(kuò)展性好:當(dāng)需要新增一種產(chǎn)品時(shí),只需要新增對(duì)應(yīng)的產(chǎn)品實(shí)現(xiàn)類和工廠類,不需要修改已有代碼,符合開(kāi)閉原則。
  4. 提供接口的統(tǒng)一管理:工廠模式通過(guò)工廠接口來(lái)管理具體產(chǎn)品的創(chuàng)建,可以統(tǒng)一管理和控制產(chǎn)品的生成過(guò)程。

工廠模式的缺點(diǎn):

  1. 增加了系統(tǒng)的抽象性和理解難度:工廠模式引入了額外的抽象層,增加了系統(tǒng)的復(fù)雜性和理解難度,不適用于簡(jiǎn)單的場(chǎng)景。
  2. 增加了系統(tǒng)的類的個(gè)數(shù):引入工廠模式會(huì)增加系統(tǒng)的類的數(shù)量,增加了代碼量和維護(hù)成本。
  3. 不符合開(kāi)閉原則:工廠模式在新增產(chǎn)品時(shí),需要新增相應(yīng)的產(chǎn)品實(shí)現(xiàn)類和工廠類,違背了開(kāi)閉原則。
?6.1.1.3??使用場(chǎng)景

工廠模式適用于以下場(chǎng)景:

  1. 當(dāng)一個(gè)類無(wú)法預(yù)知需要?jiǎng)?chuàng)建哪種類型的對(duì)象時(shí),可以使用工廠模式。工廠類會(huì)根據(jù)傳入的參數(shù)或條件來(lái)決定創(chuàng)建哪種類型的對(duì)象。
  2. 當(dāng)創(chuàng)建一個(gè)對(duì)象的過(guò)程比較復(fù)雜,需要進(jìn)行一些初始化操作或者涉及到多個(gè)步驟時(shí),可以使用工廠模式。工廠類可以對(duì)這些復(fù)雜的創(chuàng)建過(guò)程進(jìn)行封裝,使調(diào)用方只需要簡(jiǎn)單地調(diào)用工廠方法即可得到所需的對(duì)象。
  3. 當(dāng)需要統(tǒng)一管理創(chuàng)建的對(duì)象時(shí),可以使用工廠模式。工廠類可以負(fù)責(zé)對(duì)象的創(chuàng)建、緩存、銷毀等管理操作,使對(duì)象的生命周期得到有效的控制。
  4. 當(dāng)需要將對(duì)象的創(chuàng)建與使用解耦時(shí),可以使用工廠模式。調(diào)用方只需要通過(guò)工廠類來(lái)獲取所需的對(duì)象,而不需要關(guān)心對(duì)象的具體創(chuàng)建細(xì)節(jié)。
  5. 當(dāng)需要通過(guò)某種方式動(dòng)態(tài)地切換對(duì)象的創(chuàng)建方式時(shí),可以使用工廠模式。只需要修改工廠類的實(shí)現(xiàn),而不需要修改調(diào)用方的代碼,就可以實(shí)現(xiàn)對(duì)象創(chuàng)建方式的切換。
?6.1.1.4??使用案例

工廠模式是一種常用的設(shè)計(jì)模式,用于創(chuàng)建對(duì)象的實(shí)例化過(guò)程封裝。它提供了一種通過(guò)調(diào)用工廠方法來(lái)創(chuàng)建對(duì)象的方式,而無(wú)需直接使用new關(guān)鍵字來(lái)實(shí)例化對(duì)象。

下面是一個(gè)簡(jiǎn)單的工廠模式的Java使用案例:

首先,我們定義一個(gè)接口Shape,用于表示各種形狀:

public interface Shape {void draw();
}

然后,我們實(shí)現(xiàn)三個(gè)具體的形狀類,分別是Circle、RectangleSquare,它們都實(shí)現(xiàn)了Shape接口:

public class Circle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a circle");}
}public class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a rectangle");}
}public class Square implements Shape {@Overridepublic void draw() {System.out.println("Drawing a square");}
}

接下來(lái),我們創(chuàng)建一個(gè)工廠類ShapeFactory,用于根據(jù)給定的參數(shù)創(chuàng)建不同的形狀對(duì)象:

public class ShapeFactory {public Shape createShape(String shapeType) {if (shapeType == null) {return null;}if (shapeType.equalsIgnoreCase("circle")) {return new Circle();} else if (shapeType.equalsIgnoreCase("rectangle")) {return new Rectangle();} else if (shapeType.equalsIgnoreCase("square")) {return new Square();}return null;}
}

最后,我們可以在客戶端代碼中使用工廠類來(lái)創(chuàng)建并使用不同形狀的對(duì)象:

public class Main {public static void main(String[] args) {ShapeFactory factory = new ShapeFactory();// 創(chuàng)建一個(gè)圓形Shape circle = factory.createShape("circle");circle.draw();// 創(chuàng)建一個(gè)矩形Shape rectangle = factory.createShape("rectangle");rectangle.draw();// 創(chuàng)建一個(gè)正方形Shape square = factory.createShape("square");square.draw();}
}

運(yùn)行上述代碼,輸出結(jié)果如下:

Drawing a circle
Drawing a rectangle
Drawing a square

通過(guò)工廠模式,我們可以將對(duì)象的創(chuàng)建過(guò)程封裝起來(lái),使客戶端代碼與具體對(duì)象的類耦合度降低,增強(qiáng)了代碼的可擴(kuò)展性和可維護(hù)性。

6.1.2?抽象工廠模式(Abstract Factory Pattern)

6.1.2.1 簡(jiǎn)介

????????抽象工廠模式是一種設(shè)計(jì)模式,旨在提供一個(gè)統(tǒng)一的接口來(lái)創(chuàng)建一系列相關(guān)或相互依賴的對(duì)象,而無(wú)需指定具體的類。

????????在抽象工廠模式中,有一個(gè)抽象工廠類,聲明了創(chuàng)建不同類型對(duì)象的抽象方法。具體的工廠類繼承自抽象工廠類,并實(shí)現(xiàn)了抽象方法來(lái)創(chuàng)建具體的對(duì)象。每個(gè)具體的工廠類對(duì)應(yīng)一組具體的產(chǎn)品類。

????????在客戶端代碼中,通過(guò)實(shí)例化具體的工廠類,可以得到一組具體的產(chǎn)品對(duì)象??蛻舳舜a與具體的工廠類及產(chǎn)品類分離,可以方便地替換不同工廠類或產(chǎn)品類。

????????抽象工廠模式可以幫助我們實(shí)現(xiàn)高層的解耦,同時(shí)還可以提供一定程度的擴(kuò)展性。缺點(diǎn)是如果有新的產(chǎn)品類需要添加,需要修改抽象工廠類的接口及所有的具體工廠類。

6.1.2.2?優(yōu)缺點(diǎn)

抽象工廠模式是一種用于創(chuàng)建相關(guān)或依賴對(duì)象系列的設(shè)計(jì)模式。它提供了一種將具體類的實(shí)例化延遲到子類的方法,以便子類可以決定創(chuàng)建的具體對(duì)象類型。

優(yōu)點(diǎn):

  1. 隔離了具體類的實(shí)現(xiàn):客戶端只需要知道抽象工廠和抽象產(chǎn)品的接口,而不需要了解具體的實(shí)現(xiàn)。這樣可以減少客戶端與具體類的耦合,使得系統(tǒng)更加靈活和可擴(kuò)展。
  2. 提供了一種可替換的實(shí)現(xiàn):由于抽象工廠模式將具體類的實(shí)現(xiàn)與客戶端分離,可以很容易地替換具體工廠和產(chǎn)品的實(shí)現(xiàn),從而實(shí)現(xiàn)系統(tǒng)的靈活性。
  3. 符合開(kāi)閉原則:當(dāng)需要新增一種產(chǎn)品系列時(shí),只需要新增對(duì)應(yīng)的具體工廠和產(chǎn)品類,不需要修改已有的代碼,符合開(kāi)閉原則。

缺點(diǎn):

  1. 增加了系統(tǒng)的復(fù)雜性:引入抽象工廠模式會(huì)增加系統(tǒng)的類和對(duì)象數(shù)量,增加了系統(tǒng)的復(fù)雜性,使得系統(tǒng)難以理解和維護(hù)。
  2. 不易擴(kuò)展新的產(chǎn)品:由于抽象工廠模式中的抽象工廠和產(chǎn)品是固定的,當(dāng)需要新增一種產(chǎn)品時(shí),需要修改抽象工廠和所有具體工廠的代碼,導(dǎo)致系統(tǒng)擴(kuò)展困難。
  3. 不符合單一職責(zé)原則:抽象工廠模式將一系列產(chǎn)品的創(chuàng)建邏輯封裝在一個(gè)工廠類中,可能會(huì)導(dǎo)致該工廠類承擔(dān)過(guò)多的職責(zé),違反了單一職責(zé)原則。
6.1.2.3?使用場(chǎng)景

抽象工廠模式通常在以下場(chǎng)景中使用:

  1. 當(dāng)需要?jiǎng)?chuàng)建一組相互關(guān)聯(lián)或相互依賴的對(duì)象時(shí),可以使用抽象工廠模式。例如,在一個(gè)圖形編輯器中,需要?jiǎng)?chuàng)建不同類型的圖形對(duì)象(如圓形、正方形、矩形等),并且這些對(duì)象需要具有相同的樣式(如顏色、邊框樣式等),可以使用抽象工廠模式創(chuàng)建不同類型的圖形對(duì)象和樣式對(duì)象。

  2. 當(dāng)需要?jiǎng)?chuàng)建一組具有相同接口的對(duì)象,并且客戶端不關(guān)心具體實(shí)現(xiàn)時(shí),可以使用抽象工廠模式。例如,在一個(gè)圖形界面庫(kù)中,需要提供不同類型的按鈕和文本框,但是客戶端只需要關(guān)心這些組件具備的基本功能(如點(diǎn)擊事件、輸入文本等),可以使用抽象工廠模式創(chuàng)建不同類型的按鈕和文本框?qū)ο蟆?/p>

  3. 當(dāng)希望客戶端與具體類的實(shí)現(xiàn)解耦時(shí),可以使用抽象工廠模式。例如,客戶端需要使用數(shù)據(jù)庫(kù)訪問(wèn)接口進(jìn)行數(shù)據(jù)操作,但是不希望直接依賴于某個(gè)具體的數(shù)據(jù)庫(kù)實(shí)現(xiàn),可以使用抽象工廠模式創(chuàng)建數(shù)據(jù)庫(kù)訪問(wèn)接口的具體實(shí)現(xiàn)。

  4. 當(dāng)需要在運(yùn)行時(shí)動(dòng)態(tài)切換不同的產(chǎn)品族時(shí),可以使用抽象工廠模式。例如,在一個(gè)電子設(shè)備管理系統(tǒng)中,需要支持不同供應(yīng)商的設(shè)備(如攝像頭、打印機(jī)等),可以使用抽象工廠模式創(chuàng)建不同供應(yīng)商的設(shè)備對(duì)象,并在運(yùn)行時(shí)動(dòng)態(tài)切換不同的設(shè)備供應(yīng)商。

總之,抽象工廠模式適用于需要?jiǎng)?chuàng)建一組相關(guān)對(duì)象,并且希望客戶端與具體實(shí)現(xiàn)解耦的場(chǎng)景。

6.1.2.4?使用案例

下面是一個(gè)使用抽象工廠模式的Java案例,假設(shè)我們正在開(kāi)發(fā)一個(gè)角色扮演游戲,需要?jiǎng)?chuàng)建不同種類的角色和武器。

首先,我們需要定義一個(gè)抽象工廠接口CharacterFactory,該接口包含了創(chuàng)建角色和武器的方法:

public interface CharacterFactory {Character createCharacter();Weapon createWeapon();
}

然后,我們實(shí)現(xiàn)了兩個(gè)具體的工廠類MedievalFactorySciFiFactory,分別用于創(chuàng)建中世紀(jì)和科幻風(fēng)格的角色和武器:

// 中世紀(jì)工廠
public class MedievalFactory implements CharacterFactory {public Character createCharacter() {return new Knight();}public Weapon createWeapon() {return new Sword();}
}// 科幻工廠
public class SciFiFactory implements CharacterFactory {public Character createCharacter() {return new Robot();}public Weapon createWeapon() {return new LaserGun();}
}

接下來(lái),我們定義了兩個(gè)角色類KnightRobot,以及兩種武器類SwordLaserGun,分別對(duì)應(yīng)中世紀(jì)和科幻風(fēng)格的角色和武器。

最后,我們可以使用抽象工廠模式來(lái)創(chuàng)建不同風(fēng)格的角色和武器:

public class Main {public static void main(String[] args) {// 創(chuàng)建中世紀(jì)角色和武器CharacterFactory medievalFactory = new MedievalFactory();Character medievalCharacter = medievalFactory.createCharacter();Weapon medievalWeapon = medievalFactory.createWeapon();medievalCharacter.attack(medievalWeapon);medievalCharacter.defend();// 創(chuàng)建科幻角色和武器CharacterFactory sciFiFactory = new SciFiFactory();Character sciFiCharacter = sciFiFactory.createCharacter();Weapon sciFiWeapon = sciFiFactory.createWeapon();sciFiCharacter.attack(sciFiWeapon);sciFiCharacter.defend();}
}

在這個(gè)案例中,抽象工廠模式幫助我們通過(guò)CharacterFactory接口創(chuàng)建不同風(fēng)格的角色和武器,使得客戶端代碼不需要知道具體的實(shí)現(xiàn)類。這樣,當(dāng)我們需要添加新的角色或武器時(shí),只需要?jiǎng)?chuàng)建新的工廠類和相應(yīng)的角色和武器類即可,而無(wú)需修改現(xiàn)有的代碼。

6.1.3?單例模式(Singleton Pattern)

6.1.3.1 簡(jiǎn)介

????????單例模式是一種創(chuàng)建型設(shè)計(jì)模式,它確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)。在單例模式中,類的構(gòu)造函數(shù)是私有的,這意味著其他類無(wú)法直接實(shí)例化該類。而是通過(guò)一個(gè)靜態(tài)方法或?qū)傩詠?lái)獲取類的唯一實(shí)例。

6.1.3.2?優(yōu)缺點(diǎn)

單例模式是一種設(shè)計(jì)模式,其目的是確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)。

優(yōu)點(diǎn):

  1. 在內(nèi)存中只有一個(gè)實(shí)例,節(jié)省了系統(tǒng)資源,提高了性能。
  2. 簡(jiǎn)化了對(duì)象的管理,避免了重復(fù)創(chuàng)建和銷毀對(duì)象的開(kāi)銷。
  3. 全局訪問(wèn)點(diǎn)可以讓其他對(duì)象輕松地訪問(wèn)單例對(duì)象。

缺點(diǎn):

  1. 單例模式會(huì)增加代碼的復(fù)雜度,使代碼的可讀性和可維護(hù)性降低。
  2. 單例模式對(duì)擴(kuò)展不友好,如果未來(lái)需要擴(kuò)展單例對(duì)象的功能,可能需要修改已有的代碼。
  3. 單例模式的單一實(shí)例可能會(huì)成為系統(tǒng)的瓶頸,如果該實(shí)例需要進(jìn)行大量的計(jì)算或者處理大量的數(shù)據(jù),可能會(huì)成為系統(tǒng)的性能瓶頸。
  4. 單例模式不適用于多線程環(huán)境下,如果多個(gè)線程同時(shí)訪問(wèn)單例對(duì)象,可能會(huì)導(dǎo)致競(jìng)爭(zhēng)條件和數(shù)據(jù)不一致的問(wèn)題,需要額外的代碼來(lái)處理線程安全性。

總結(jié)起來(lái),單例模式在某些情況下可以提供一些好處,但也需要謹(jǐn)慎使用,以免引入不必要的復(fù)雜性和潛在的問(wèn)題。

6.1.3.3?使用場(chǎng)景

單例模式的使用場(chǎng)景有以下幾種:

  1. 需要將某個(gè)類的實(shí)例化對(duì)象保持全局唯一,例如日志記錄器、數(shù)據(jù)庫(kù)連接池等。

  2. 需要頻繁創(chuàng)建和銷毀對(duì)象,且創(chuàng)建和銷毀對(duì)象的代價(jià)較大,單例模式可以避免頻繁創(chuàng)建和銷毀,提高性能。

  3. 需要訪問(wèn)共享資源,例如線程池、線程管理器等。

  4. 需要確保系統(tǒng)中某個(gè)類只有一個(gè)實(shí)例存在,以便其他對(duì)象可以通過(guò)該實(shí)例訪問(wèn)公共資源。

總之,單例模式適用于那些需要全局唯一的對(duì)象,并且需要在多個(gè)地方進(jìn)行訪問(wèn)的場(chǎng)景。

6.1.3.4?使用案例

單例模式是一種創(chuàng)建型設(shè)計(jì)模式,用于確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)來(lái)訪問(wèn)該實(shí)例。

以下是一個(gè)使用單例模式的Java案例:

public class Singleton {private static Singleton instance;// 私有構(gòu)造函數(shù),禁止外部直接創(chuàng)建對(duì)象private Singleton() {// 初始化代碼}// 公共靜態(tài)方法來(lái)獲取實(shí)例public static Singleton getInstance() {if (instance == null) {// 在第一次調(diào)用時(shí),創(chuàng)建實(shí)例instance = new Singleton();}return instance;}// 其他業(yè)務(wù)方法public void showMessage() {System.out.println("Hello, World!");}
}

在上面的代碼中,Singleton類只有一個(gè)私有的靜態(tài)成員變量instance,用來(lái)存儲(chǔ)類的唯一實(shí)例。getInstance方法是公共的靜態(tài)方法,用來(lái)獲取該實(shí)例。

使用示例:

public class Main {public static void main(String[] args) {// 獲取Singleton實(shí)例Singleton singleton = Singleton.getInstance();// 調(diào)用業(yè)務(wù)方法singleton.showMessage(); // 輸出:Hello, World!}
}

在上面的示例中,我們通過(guò)Singleton.getInstance()方法獲取了Singleton類的唯一實(shí)例,并通過(guò)該實(shí)例調(diào)用了showMessage方法。

這種設(shè)計(jì)模式的好處是它確保任何時(shí)候都只有一個(gè)類的實(shí)例存在,避免了重復(fù)創(chuàng)建實(shí)例的開(kāi)銷,并提供了一個(gè)全局訪問(wèn)點(diǎn)來(lái)訪問(wèn)該實(shí)例。

6.1.4?建造者模式(Builder Pattern)

6.1.4.1 簡(jiǎn)介

建造者模式是一種創(chuàng)建型設(shè)計(jì)模式,它將對(duì)象的構(gòu)建過(guò)程與其表示分離,以便相同的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。它允許你使用相同的構(gòu)建代碼來(lái)創(chuàng)建不同類型和表示的對(duì)象。

在建造者模式中,有一個(gè)建造者類,它負(fù)責(zé)創(chuàng)建對(duì)象的各個(gè)部分,并將它們組裝成一個(gè)完整的對(duì)象。該建造者類可以包含多個(gè)方法,每個(gè)方法用于構(gòu)建對(duì)象的一個(gè)部分。此外,還有一個(gè)指揮者類,它指導(dǎo)建造者類如何進(jìn)行構(gòu)建。

使用建造者模式的主要目的是將復(fù)雜對(duì)象的構(gòu)建過(guò)程與其表示分離,使其更加靈活和可擴(kuò)展。通過(guò)使用建造者模式,可以使構(gòu)建過(guò)程更加直觀,清晰,并且可以根據(jù)需要靈活地組裝不同類型和表示的對(duì)象。

建造者模式的主要角色包括:

  • 產(chǎn)品類:表示被構(gòu)建的復(fù)雜對(duì)象。
  • 抽象建造者類:定義構(gòu)建產(chǎn)品所需要的各個(gè)部分的抽象方法。
  • 具體建造者類:實(shí)現(xiàn)抽象建造者類中定義的方法,具體構(gòu)建產(chǎn)品的各個(gè)部分。
  • 指揮者類:指導(dǎo)具體建造者類如何進(jìn)行構(gòu)建,負(fù)責(zé)調(diào)用具體建造者類的方法來(lái)構(gòu)建產(chǎn)品。
6.1.4.2?優(yōu)缺點(diǎn)

建造者模式的優(yōu)缺點(diǎn)如下:

優(yōu)點(diǎn):

  1. 建造者模式可以將一個(gè)復(fù)雜對(duì)象的構(gòu)建過(guò)程抽象出來(lái),使得構(gòu)建過(guò)程與表示相分離,使得相同的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。
  2. 可以更加精細(xì)地控制對(duì)象的構(gòu)建過(guò)程,使得構(gòu)建的對(duì)象可以符合特定的需求和約束。
  3. 可以簡(jiǎn)化客戶端的使用,客戶端只需要指定需要構(gòu)建的類型和順序,而不需要關(guān)心具體的構(gòu)建過(guò)程。

缺點(diǎn):

  1. 建造者模式需要定義一個(gè)獨(dú)立的建造者類,增加了系統(tǒng)的復(fù)雜度。
  2. 如果對(duì)象的結(jié)構(gòu)較為簡(jiǎn)單,或者對(duì)象的構(gòu)建過(guò)程較為簡(jiǎn)單,使用建造者模式可能會(huì)顯得繁瑣。
  3. 如果對(duì)象的部分屬性之間存在較強(qiáng)的關(guān)聯(lián)關(guān)系,而且需要以某種特定的順序來(lái)構(gòu)建對(duì)象,可能會(huì)增加建造者類的復(fù)雜度。
6.1.4.3?使用場(chǎng)景

建造者模式適用于以下場(chǎng)景:

  1. 當(dāng)創(chuàng)建對(duì)象的過(guò)程比較復(fù)雜,包含多個(gè)步驟、條件和子對(duì)象時(shí),可以使用建造者模式來(lái)封裝對(duì)象的創(chuàng)建過(guò)程,并提供一個(gè)統(tǒng)一的接口。

  2. 當(dāng)需要?jiǎng)?chuàng)建的對(duì)象具有多種變化組合時(shí),可以使用建造者模式來(lái)構(gòu)建不同組合的對(duì)象,而不需要?jiǎng)?chuàng)建大量的構(gòu)造函數(shù)或者使用復(fù)雜的參數(shù)列表。

  3. 當(dāng)需要在創(chuàng)建對(duì)象時(shí)進(jìn)行一些額外的處理或者初始化操作時(shí),可以使用建造者模式來(lái)在創(chuàng)建對(duì)象的過(guò)程中執(zhí)行這些操作,而不需要在每個(gè)地方都寫(xiě)重復(fù)的代碼。

  4. 當(dāng)需要?jiǎng)?chuàng)建一個(gè)不可變對(duì)象時(shí),可以使用建造者模式來(lái)通過(guò)鏈?zhǔn)秸{(diào)用的方式逐步構(gòu)建對(duì)象的屬性,最后通過(guò)調(diào)用build方法來(lái)返回一個(gè)不可變的對(duì)象。

總的來(lái)說(shuō),建造者模式適用于需要?jiǎng)?chuàng)建復(fù)雜對(duì)象、有多種組合方式或者需要在創(chuàng)建過(guò)程中進(jìn)行一些額外處理的場(chǎng)景。

6.1.4.4?使用案例

????????建造者模式是一種創(chuàng)建型設(shè)計(jì)模式,它允許你通過(guò)一步一步地構(gòu)造復(fù)雜對(duì)象。它將構(gòu)造過(guò)程和表示對(duì)象的內(nèi)部結(jié)構(gòu)分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。

????????在Java中,可以使用建造者模式來(lái)創(chuàng)建復(fù)雜的對(duì)象,避免構(gòu)造函數(shù)的參數(shù)過(guò)多或使用過(guò)長(zhǎng)的參數(shù)列表來(lái)構(gòu)造對(duì)象。下面是一個(gè)使用建造者模式的Java案例。

????????假設(shè)有一個(gè)汽車類Car,它有多個(gè)可選屬性,例如顏色、引擎類型、座位數(shù)量等。我們希望能夠方便地創(chuàng)建不同配置的汽車對(duì)象。首先,我們定義Car類:

public class Car {private String color;private String engineType;private int seatCount;// 私有構(gòu)造函數(shù),只能通過(guò)Builder來(lái)創(chuàng)建Car對(duì)象private Car(Builder builder) {this.color = builder.color;this.engineType = builder.engineType;this.seatCount = builder.seatCount;}// Getter方法public String getColor() {return color;}public String getEngineType() {return engineType;}public int getSeatCount() {return seatCount;}// 內(nèi)部靜態(tài)Builder類,用于構(gòu)建Car對(duì)象public static class Builder {private String color;private String engineType;private int seatCount;// 設(shè)置必需的參數(shù)public Builder(String color, String engineType) {this.color = color;this.engineType = engineType;}// 設(shè)置可選參數(shù)public Builder seatCount(int seatCount) {this.seatCount = seatCount;return this;}// 構(gòu)建Car對(duì)象public Car build() {return new Car(this);}}
}

現(xiàn)在,我們可以使用Builder類來(lái)創(chuàng)建不同配置的Car對(duì)象。例如:

Car car1 = new Car.Builder("red", "V8").seatCount(4).build();
Car car2 = new Car.Builder("blue", "electric").seatCount(2).build();

上述代碼中,我們首先通過(guò)Builder類創(chuàng)建一個(gè)Builder對(duì)象,然后使用鏈?zhǔn)秸{(diào)用來(lái)設(shè)置可選參數(shù),最后調(diào)用build()方法來(lái)構(gòu)建Car對(duì)象。

使用建造者模式的好處是,可以按需設(shè)置對(duì)象的屬性,而不必關(guān)心構(gòu)造函數(shù)的參數(shù)順序或參數(shù)類型。這樣可以使代碼更加清晰、易讀和易于維護(hù)。

6.1.5?原型模式(Prototype Pattern)

6.1.5.1 簡(jiǎn)介

????????原型模式是一種創(chuàng)建型設(shè)計(jì)模式,它通過(guò)復(fù)制現(xiàn)有對(duì)象來(lái)生成新對(duì)象,而無(wú)需顯式地使用構(gòu)造函數(shù)。在原型模式中,通過(guò)克隆一個(gè)已經(jīng)存在的對(duì)象的原型來(lái)創(chuàng)建新的對(duì)象,并且可以根據(jù)需要進(jìn)行參數(shù)的修改。

????????該模式的主要目的是盡量減少對(duì)象的創(chuàng)建,通過(guò)復(fù)制已有對(duì)象的原型來(lái)創(chuàng)建新對(duì)象,可以在某些場(chǎng)景下提升性能和效率。

原型模式通常包含以下幾個(gè)角色:

  1. 原型接口/抽象類(Prototype):定義克隆方法的接口或抽象類,所有具體原型類都要實(shí)現(xiàn)或繼承此接口。

  2. 具體原型類(ConcretePrototype):實(shí)現(xiàn)克隆方法的具體原型類。

  3. 客戶端(Client):使用原型對(duì)象的客戶端,在需要?jiǎng)?chuàng)建新對(duì)象時(shí),通過(guò)克隆原型對(duì)象來(lái)創(chuàng)建。

6.1.5.2?優(yōu)缺點(diǎn)

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

  1. 簡(jiǎn)化對(duì)象的創(chuàng)建過(guò)程:原型模式通過(guò)復(fù)制現(xiàn)有對(duì)象來(lái)創(chuàng)建新對(duì)象,避免了創(chuàng)建對(duì)象的復(fù)雜的初始化步驟,使得對(duì)象的創(chuàng)建過(guò)程更加簡(jiǎn)單。
  2. 提高性能:原型模式通過(guò)復(fù)制現(xiàn)有對(duì)象來(lái)創(chuàng)建新對(duì)象,避免了對(duì)象的重新初始化,可以提高創(chuàng)建對(duì)象的效率。
  3. 動(dòng)態(tài)添加和刪除對(duì)象:原型模式允許動(dòng)態(tài)地添加和刪除原型對(duì)象,方便了對(duì)象的管理。
  4. 隱藏創(chuàng)建過(guò)程:原型模式將對(duì)象的創(chuàng)建過(guò)程封裝在原型類中,客戶端只需要通過(guò)復(fù)制操作即可獲取新對(duì)象,不需要關(guān)心對(duì)象的創(chuàng)建細(xì)節(jié)。

原型模式的缺點(diǎn):

  1. 需要對(duì)原型對(duì)象進(jìn)行克隆操作:使用原型模式需要在每個(gè)具體原型類中實(shí)現(xiàn)克隆操作,如果對(duì)象的成員變量較多或者成員變量為引用類型,需要對(duì)每個(gè)引用對(duì)象進(jìn)行深拷貝,實(shí)現(xiàn)克隆操作可能會(huì)比較復(fù)雜。
  2. 可能導(dǎo)致循環(huán)引用問(wèn)題:在克隆操作中,如果存在循環(huán)引用,可能導(dǎo)致克隆對(duì)象中出現(xiàn)重復(fù)的對(duì)象,影響對(duì)象的正確性。
  3. 可能導(dǎo)致性能問(wèn)題:使用原型模式創(chuàng)建對(duì)象時(shí),會(huì)通過(guò)復(fù)制操作來(lái)創(chuàng)建新對(duì)象,如果對(duì)象的復(fù)制過(guò)程比較復(fù)雜,可能會(huì)導(dǎo)致性能問(wèn)題。
6.1.5.3?使用場(chǎng)景

原型模式的主要使用場(chǎng)景如下:

  1. 當(dāng)一個(gè)對(duì)象的創(chuàng)建過(guò)程比較復(fù)雜或者耗時(shí)時(shí),可以使用原型模式來(lái)復(fù)制一個(gè)已經(jīng)存在的對(duì)象,然后進(jìn)行適當(dāng)?shù)男薷?#xff0c;以減少對(duì)原對(duì)象的創(chuàng)建過(guò)程和資源消耗。

  2. 當(dāng)一個(gè)對(duì)象需要在不同的場(chǎng)景中多次創(chuàng)建時(shí),可以使用原型模式來(lái)復(fù)制一個(gè)已有的對(duì)象,然后進(jìn)行適當(dāng)?shù)男薷暮投ㄖ?#xff0c;以滿足不同場(chǎng)景的需求。

  3. 當(dāng)一個(gè)對(duì)象的創(chuàng)建過(guò)程需要依賴于其他對(duì)象或者配置信息時(shí),可以使用原型模式來(lái)復(fù)制一個(gè)已有的對(duì)象,然后進(jìn)行適當(dāng)?shù)男薷暮团渲?#xff0c;以簡(jiǎn)化對(duì)象的創(chuàng)建過(guò)程。

  4. 當(dāng)一個(gè)對(duì)象的創(chuàng)建過(guò)程需要根據(jù)運(yùn)行時(shí)的條件決定時(shí),可以使用原型模式來(lái)復(fù)制一個(gè)已有的對(duì)象,然后進(jìn)行適當(dāng)?shù)男薷暮投ㄖ?#xff0c;以根據(jù)不同的條件創(chuàng)建不同的對(duì)象。

總之,原型模式適用于對(duì)象創(chuàng)建過(guò)程復(fù)雜、耗時(shí)或者需要重復(fù)創(chuàng)建的場(chǎng)景,可以通過(guò)復(fù)制已有對(duì)象來(lái)簡(jiǎn)化和加快對(duì)象的創(chuàng)建過(guò)程。

6.1.5.4?使用案例

原型模式是一種創(chuàng)建型設(shè)計(jì)模式,它通過(guò)復(fù)制現(xiàn)有對(duì)象的原型來(lái)創(chuàng)建新的對(duì)象。與使用new關(guān)鍵字創(chuàng)建新對(duì)象相比,原型模式更加靈活和高效。

在Java中,實(shí)現(xiàn)原型模式主要涉及以下幾個(gè)步驟:

  1. 創(chuàng)建一個(gè)原型接口(或抽象類),聲明一個(gè)克隆方法clone(),用于復(fù)制對(duì)象。
public interface Prototype {Prototype clone();
}

? ? ? ? 2. 實(shí)現(xiàn)原型接口的具體類,該類需要實(shí)現(xiàn)clone()方法來(lái)復(fù)制對(duì)象。

public class ConcretePrototype implements Prototype {private String name;public ConcretePrototype(String name) {this.name = name;}public Prototype clone() {return new ConcretePrototype(name);}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

? ? ? ? 3. 在客戶端代碼中使用原型對(duì)象來(lái)創(chuàng)建新對(duì)象,而無(wú)需顯式地調(diào)用構(gòu)造函數(shù)。

public class Client {public static void main(String[] args) {ConcretePrototype prototype = new ConcretePrototype("Prototype");// 使用原型對(duì)象創(chuàng)建新對(duì)象ConcretePrototype clone = (ConcretePrototype) prototype.clone();clone.setName("Cloned Prototype");System.out.println("Original Prototype: " + prototype.getName());System.out.println("Cloned Prototype: " + clone.getName());}
}

以上代碼中,我們定義了一個(gè)原型接口Prototype,其中包含了一個(gè)clone()方法用于復(fù)制對(duì)象。然后我們實(shí)現(xiàn)了一個(gè)具體的原型類ConcretePrototype,該類實(shí)現(xiàn)了Prototype接口,并復(fù)寫(xiě)了clone()方法來(lái)創(chuàng)建新對(duì)象。

在客戶端代碼中,我們首先創(chuàng)建一個(gè)原型對(duì)象prototype,然后使用原型對(duì)象來(lái)創(chuàng)建新對(duì)象clone。通過(guò)調(diào)用clone()方法,clone對(duì)象將擁有和prototype相同的屬性值,并且它們是兩個(gè)獨(dú)立的對(duì)象。

最后,我們打印輸出了原型對(duì)象和克隆對(duì)象的名稱,可以看到它們的名稱分別為"Prototype"和"Cloned Prototype"。這證明了原型模式的成功復(fù)制和創(chuàng)建對(duì)象的能力。

原型模式在Java中的應(yīng)用非常廣泛,特別是在需要?jiǎng)?chuàng)建大量相似對(duì)象的場(chǎng)景下,原型模式能夠提供一種高效的解決方案。通過(guò)復(fù)制現(xiàn)有對(duì)象的原型,無(wú)需重復(fù)創(chuàng)建新對(duì)象,從而提高性能和代碼的可維護(hù)性。

6.2?結(jié)構(gòu)型模式(Structural)

詳見(jiàn)《Java設(shè)計(jì)模式大全:23種常見(jiàn)的設(shè)計(jì)模式詳解(二)》

6.3?行為型模式(Behavioral)

詳見(jiàn)《Java設(shè)計(jì)模式大全:23種常見(jiàn)的設(shè)計(jì)模式詳解(三)

7、結(jié)語(yǔ)

????????文章至此,已接近尾聲!希望此文能夠?qū)Υ蠹矣兴鶈l(fā)和幫助。同時(shí),感謝大家的耐心閱讀和對(duì)本文檔的信任。在未來(lái)的技術(shù)學(xué)習(xí)和工作中,期待與各位大佬共同進(jìn)步,共同探索新的技術(shù)前沿。最后,再次感謝各位的支持和關(guān)注。您的支持是作者創(chuàng)作的最大動(dòng)力,如果您覺(jué)得這篇文章對(duì)您有所幫助,請(qǐng)考慮給予一點(diǎn)打賞。

http://aloenet.com.cn/news/31765.html

相關(guān)文章:

  • 五百丁簡(jiǎn)歷模板官方網(wǎng)站互聯(lián)網(wǎng)營(yíng)銷師報(bào)名入口
  • 網(wǎng)站首頁(yè)ico怎么做平臺(tái)網(wǎng)站開(kāi)發(fā)公司
  • 邢臺(tái)新聞網(wǎng)關(guān)鍵詞優(yōu)化的主要工具
  • 中國(guó)建筑工程人才網(wǎng)湖南有實(shí)力seo優(yōu)化
  • 高級(jí)程序員培訓(xùn)西安seo高手
  • 提供專業(yè)網(wǎng)站小程序開(kāi)發(fā)朝陽(yáng)網(wǎng)站建設(shè)
  • 香河做網(wǎng)站公司設(shè)計(jì)師網(wǎng)站
  • 淘寶網(wǎng)手機(jī)版百度seo快速排名優(yōu)化軟件
  • b2c網(wǎng)絡(luò)零售平臺(tái)南陽(yáng)seo優(yōu)化
  • 北京市公司網(wǎng)站制作全達(dá)seo
  • 上海公安網(wǎng)站seo技術(shù)顧問(wèn)
  • 深圳知名企業(yè)seo的中文含義是什么
  • 建購(gòu)物網(wǎng)站要多少錢(qián)網(wǎng)絡(luò)營(yíng)銷比較好的企業(yè)
  • 品牌網(wǎng)站建設(shè) 2蝌蚪小社交網(wǎng)絡(luò)推廣方法有哪些
  • 如何把做的網(wǎng)站變成鏈接如何網(wǎng)站關(guān)鍵詞優(yōu)化
  • 哪家做網(wǎng)站比較好友情鏈接方面
  • 可以做流程圖的網(wǎng)站運(yùn)營(yíng)推廣的方式和渠道有哪些
  • 湖南網(wǎng)站服務(wù)活動(dòng)策劃方案詳細(xì)模板
  • 怎么樣網(wǎng)站開(kāi)源chatgpt網(wǎng)址
  • 泉州網(wǎng)站建設(shè)方案策劃東莞疫情最新消息今天
  • 如何做房地產(chǎn)微信推送網(wǎng)站廣告神馬關(guān)鍵詞快速排名軟件
  • 雙擁網(wǎng)站建設(shè)申請(qǐng)推廣方式和推廣渠道
  • 做廚具公司網(wǎng)站百度熱線客服24小時(shí)
  • 衡陽(yáng)百度網(wǎng)站建設(shè)西安快速排名優(yōu)化
  • 微信公眾賬號(hào)申請(qǐng)網(wǎng)站嗎企業(yè)推廣平臺(tái)
  • 網(wǎng)站后臺(tái)logo網(wǎng)站推廣優(yōu)化怎么做最好
  • 網(wǎng)站開(kāi)發(fā)調(diào)研報(bào)告網(wǎng)上找客戶有什么渠道
  • 在哪下載.net網(wǎng)站作品廣告軟文200字
  • 湖南網(wǎng)站制作公司湖南seo網(wǎng)站策劃
  • 網(wǎng)站 建設(shè) 匯報(bào)貴陽(yáng)百度seo點(diǎn)擊軟件