白白胖胖,充滿希望~
1. 工廠模式
Java工廠模式(Factory Pattern)是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種創(chuàng)建對(duì)象的最佳方式,而無(wú)需將對(duì)象的創(chuàng)建邏輯暴露給客戶端代碼。工廠模式通過(guò)定義一個(gè)工廠方法來(lái)創(chuàng)建對(duì)象,而客戶端只需要調(diào)用該工廠方法即可獲得所需對(duì)象,從而實(shí)現(xiàn)了對(duì)象的創(chuàng)建和使用的分離。
在Java中,工廠模式通常包括以下幾個(gè)角色:
抽象產(chǎn)品(Product):定義了產(chǎn)品對(duì)象的通用接口,所有具體產(chǎn)品都必須實(shí)現(xiàn)這個(gè)接口。
具體產(chǎn)品(Concrete Product):實(shí)現(xiàn)了抽象產(chǎn)品接口的具體類,在工廠方法中將被創(chuàng)建。
抽象工廠(Factory):定義了工廠方法,用于創(chuàng)建產(chǎn)品對(duì)象的接口。
具體工廠(Concrete Factory):實(shí)現(xiàn)了工廠方法,返回具體產(chǎn)品對(duì)象的實(shí)例。
1.1 工廠模式運(yùn)用場(chǎng)景
當(dāng)需要在運(yùn)行時(shí)根據(jù)某些條件創(chuàng)建對(duì)象時(shí),可以使用工廠模式。例如,如果您正在構(gòu)建一個(gè)游戲,每當(dāng)用戶選擇一個(gè)角色時(shí),您都希望創(chuàng)建一個(gè)相應(yīng)的角色類的實(shí)例,則可以使用工廠模式。
如果需要隱藏特定類或者實(shí)現(xiàn)的細(xì)節(jié)并只暴露一個(gè)接口,那么您可以使用工廠模式。這使得客戶端代碼更加靈活和易于維護(hù)。
工廠模式還可以用于解決依賴性注入問(wèn)題。如果您有一個(gè)類,它需要依賴于其他類的實(shí)例,并且您想要通過(guò)工廠來(lái)管理這些依賴項(xiàng),那么使用工廠模式可以很好地解決此問(wèn)題。
2. 單例模式
單例模式是一種創(chuàng)建型設(shè)計(jì)模式,它保證一個(gè)類只有一個(gè)實(shí)例,并提供全局訪問(wèn)點(diǎn)來(lái)訪問(wèn)該實(shí)例。
2.1 單例模式運(yùn)用場(chǎng)景
單例模式通常用于需要保證全局只有一個(gè)實(shí)例對(duì)象的場(chǎng)景,例如:
數(shù)據(jù)庫(kù)連接池:在應(yīng)用程序中,數(shù)據(jù)庫(kù)連接池是一種重要的資源,如果每次使用時(shí)都創(chuàng)建一個(gè)新的連接,會(huì)影響應(yīng)用程序的性能。因此,將數(shù)據(jù)庫(kù)連接池實(shí)現(xiàn)為單例可以避免創(chuàng)建多個(gè)連接,從而提高應(yīng)用程序的性能。
日志記錄器:在應(yīng)用程序中,日志記錄器是一種常見(jiàn)的工具,它可以用來(lái)記錄應(yīng)用程序的運(yùn)行狀態(tài)以及錯(cuò)誤信息。由于日志記錄器在整個(gè)應(yīng)用程序中都會(huì)被使用,因此將其實(shí)現(xiàn)為單例可以確保所有的日志記錄都進(jìn)入同一個(gè)文件或者數(shù)據(jù)庫(kù)中,便于統(tǒng)一管理和查看。
配置文件管理器:在應(yīng)用程序中,配置文件通常用來(lái)存儲(chǔ)應(yīng)用程序的配置信息,例如數(shù)據(jù)庫(kù)連接參數(shù)、服務(wù)器地址等。將配置文件管理器實(shí)現(xiàn)為單例可以確保所有的配置信息都被正確地加載,并且不會(huì)出現(xiàn)重復(fù)加載的情況。
總之,單例模式適用于任何需要確保全局只有一個(gè)實(shí)例對(duì)象的場(chǎng)景,特別是那些需要經(jīng)常訪問(wèn)的對(duì)象,因?yàn)樗梢詭椭覀兘档蛯?duì)象的創(chuàng)建和銷毀成本,提高系統(tǒng)的性能和可維護(hù)性。
3. 建造者模式
建造者模式(Builder Pattern):將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。
public class User {
private String name;
private int age;
private String email;
private User(UserBuilder builder) {
this.name = builder.name;
this.age = builder.age;
this.email = builder.email;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getEmail() {
return email;
}
public static class UserBuilder {
private String name;
private int age;
private String email;
public UserBuilder(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
public User build() {
return new User(this);
}
}
}
在上面的代碼中,我們定義了一個(gè)User類和一個(gè)內(nèi)部類UserBuilder,在UserBuilder類中定義了三個(gè)屬性:name、age和email,并提供了一個(gè)build()方法來(lái)返回一個(gè)User對(duì)象。這個(gè)UserBuilder類可以用來(lái)初始化User對(duì)象的屬性,如下所示:
User user = new User.UserBuilder(“Tom”, 18, “tom@example.com”).build();
3.1 使用場(chǎng)景
建造者模式是一種創(chuàng)建型設(shè)計(jì)模式,它的主要目的是將一個(gè)復(fù)雜對(duì)象的構(gòu)造過(guò)程和表示分離,從而使得相同的構(gòu)造過(guò)程可以創(chuàng)建不同的表示形式。建造者模式通常適用于以下情況:
創(chuàng)建一個(gè)復(fù)雜的對(duì)象,其構(gòu)造需要多個(gè)步驟或者涉及到多個(gè)可選組件。
需要在某些步驟中靈活地配置對(duì)象的構(gòu)造過(guò)程,以滿足不同的需求。
需要隱藏對(duì)象的構(gòu)造細(xì)節(jié),防止客戶端直接訪問(wèn)構(gòu)造函數(shù)。
需要避免構(gòu)造函數(shù)參數(shù)列表過(guò)長(zhǎng),難以管理和維護(hù)。
建造者模式通過(guò)將構(gòu)造過(guò)程分解為多個(gè)步驟,并提供一個(gè)統(tǒng)一的接口來(lái)指導(dǎo)這些步驟的執(zhí)行順序,使得客戶端可以更加方便地創(chuàng)建所需的對(duì)象,同時(shí)也能夠靈活地配置其構(gòu)造過(guò)程,提高代碼的可讀性、可維護(hù)性和可擴(kuò)展性。
4. 策略模式
Java 策略模式(Strategy Pattern)是一種行為型設(shè)計(jì)模式,它定義了一組算法,將每個(gè)算法都封裝起來(lái),使得它們之間可以互換。策略模式讓算法的變化獨(dú)立于使用算法的客戶端,從而提高了代碼的靈活性和可復(fù)用性。
在 Java 中,策略模式通常包括以下角色:
Context:上下文對(duì)象,持有一個(gè)對(duì)策略對(duì)象的引用,并將具體的任務(wù)委托給策略對(duì)象進(jìn)行處理。
Strategy:策略接口,定義了所有支持的算法的公共接口。
ConcreteStrategy:具體策略類,實(shí)現(xiàn)策略接口中定義的算法,完成具體的任務(wù)。
4.1 應(yīng)用場(chǎng)景
以下是Java策略模式的一些應(yīng)用場(chǎng)景:
各種排序算法:在排序算法中,我們可以定義一個(gè)Comparator接口,并實(shí)現(xiàn)不同的比較器算法,這些算法可以根據(jù)具體需求靈活地進(jìn)行切換。
圖像處理:在圖像處理中,我們可以定義一個(gè)Filter接口,并實(shí)現(xiàn)不同的濾鏡算法,這些算法可以根據(jù)用戶需要?jiǎng)討B(tài)地選擇和切換。
支付方式選擇:在電商網(wǎng)站中,用戶可以根據(jù)自己的需求選擇不同的支付方式,而定義一個(gè)PaymentStrategy接口并實(shí)現(xiàn)不同的支付算法就可以實(shí)現(xiàn)這一功能。
游戲角色攻擊方式:在游戲中,我們可以定義一個(gè)AttackStrategy接口,并實(shí)現(xiàn)不同的攻擊算法,這些算法可以根據(jù)不同的游戲角色進(jìn)行靈活切換。
適配器模式(Adapter Pattern):將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,使得原本由于接口不兼容而不能在一起工作的那些類可以在一起工作。
裝飾者模式(Decorator Pattern):動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé),就增加功能而言,比生成子類更為靈活。
觀察者模式(Observer Pattern):定義對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象狀態(tài)改變時(shí),所有依賴它的對(duì)象都會(huì)自動(dòng)得到通知。
迭代器模式(Iterator Pattern):提供一種方法來(lái)訪問(wèn)聚合對(duì)象中的每個(gè)元素,而又不暴露該對(duì)象的內(nèi)部表示。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-708926.html
模板方法模式(Template Method Pattern):定義一個(gè)操作中的算法骨架,將一些步驟延遲到子類中實(shí)現(xiàn)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-708926.html
到了這里,關(guān)于【Java】 Java設(shè)計(jì)模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!