新聞中心
工廠模式是一種創(chuàng)建型設(shè)計模式,它提供了一種創(chuàng)建對象的最佳方式,在Java中,工廠模式主要分為簡單工廠模式、工廠方法模式和抽象工廠模式,本文將介紹這三種工廠模式的應(yīng)用場景,并通過實例來說明它們的實現(xiàn)。

10年積累的成都網(wǎng)站建設(shè)、成都網(wǎng)站制作經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有龍子湖免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
一、簡單工廠模式
簡單工廠模式是一種創(chuàng)建型設(shè)計模式,它提供了一種創(chuàng)建對象的最佳方式,在簡單工廠模式中,一個工廠類負(fù)責(zé)創(chuàng)建其他類的實例,這種模式的主要優(yōu)點是可以在不修改客戶端代碼的情況下,增加新的產(chǎn)品族。
應(yīng)用場景:
1. 當(dāng)產(chǎn)品族的接口不固定時,可以使用簡單工廠模式,有一組具有相似功能的類,但它們的接口可能不同,通過使用簡單工廠模式,可以根據(jù)需要創(chuàng)建不同的類實例。
2. 當(dāng)需要根據(jù)參數(shù)來決定創(chuàng)建哪個類的實例時,可以使用簡單工廠模式,根據(jù)用戶輸入的配置信息,創(chuàng)建相應(yīng)的類實例。
3. 當(dāng)系統(tǒng)需要維護一個固定的產(chǎn)品族,而又不希望修改客戶端代碼時,可以使用簡單工廠模式,系統(tǒng)中有一個打印機類的固定產(chǎn)品族,可以通過簡單工廠模式動態(tài)地創(chuàng)建不同類型的打印機實例。
4. 當(dāng)需要隱藏創(chuàng)建對象的具體過程時,可以使用簡單工廠模式,數(shù)據(jù)庫連接池中的連接對象創(chuàng)建過程較為復(fù)雜,可以通過簡單工廠模式將這個過程封裝起來,讓客戶端只需要關(guān)注使用連接對象即可。
下面通過一個簡單的示例來說明簡單工廠模式的實現(xiàn):
// 簡單工廠接口
interface SimpleFactory {
Object createProduct();
}
// 具體產(chǎn)品A
class ConcreteProductA implements Product {
public void doSomething() {
System.out.println("ConcreteProductA is doing something.");
}
}
// 具體產(chǎn)品B
class ConcreteProductB implements Product {
public void doSomething() {
System.out.println("ConcreteProductB is doing something.");
}
}
// 抽象產(chǎn)品類
abstract class Product {
public abstract void doSomething();
}
// 具體工廠A
class ConcreteFactoryA implements SimpleFactory {
@Override
public Object createProduct() {
return new ConcreteProductA();
}
}
// 具體工廠B
class ConcreteFactoryB implements SimpleFactory {
@Override
public Object createProduct() {
return new ConcreteProductB();
}
}
二、工廠方法模式
工廠方法模式是一種創(chuàng)建型設(shè)計模式,它定義了一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類,工廠方法使一個類的實例化延遲到其子類,在工廠方法模式中,我們只需要關(guān)心如何創(chuàng)建對象,而不需要關(guān)心對象的具體實現(xiàn),這樣可以降低系統(tǒng)的耦合度,提高代碼的可擴展性。
1. 當(dāng)需要根據(jù)不同的條件創(chuàng)建不同類型的對象時,可以使用工廠方法模式,根據(jù)用戶的權(quán)限等級來決定用戶可以訪問哪些功能模塊。
2. 當(dāng)需要為每個產(chǎn)品提供一個單一的公共接口,而又需要讓子類可以改變其具體實現(xiàn)時,可以使用工廠方法模式,Java中的IO流操作都是通過InputStream和OutputStream接口來實現(xiàn)的,而具體的實現(xiàn)由不同的類來完成。
3. 當(dāng)一個類需要創(chuàng)建其子類的實例時,可以使用工廠方法模式,一個游戲引擎需要創(chuàng)建游戲中的各種角色、物體等實例時,可以將這些實例的創(chuàng)建交給游戲引擎本身來完成。
4. 當(dāng)一個類的內(nèi)部結(jié)構(gòu)在初始化時是不可變的,但又需要提供一個統(tǒng)一的接口給外部使用時,可以使用工廠方法模式,Java中的Calendar類就采用了這種模式,它的內(nèi)部結(jié)構(gòu)在初始化后就不可改變了,但提供了一個統(tǒng)一的Date接口供外部調(diào)用。
下面通過一個簡單的示例來說明工廠方法模式的實現(xiàn):
// 抽象產(chǎn)品接口
interface Product {
void use();
}
// 具體產(chǎn)品A1實現(xiàn)抽象產(chǎn)品接口
class ConcreteProductA1 implements Product {
@Override
public void use() {
System.out.println("ConcreteProductA1 is using.");
}
}
// 具體產(chǎn)品A2實現(xiàn)抽象產(chǎn)品接口
class ConcreteProductA2 implements Product {
@Override
public void use() {
System.out.println("ConcreteProductA2 is using.");
}
}
// 具體工廠A1實現(xiàn)生產(chǎn)者接口(SimpleFactory)并返回具體產(chǎn)品A1的實例對象;具體工廠A2同理。此處省略具體實現(xiàn)細(xì)節(jié)。最終客戶端只需調(diào)用getProduct()方法獲取具體產(chǎn)品即可:public static Product getProduct(String type){ if("type1".equals(type)){ return new ConcreteProductA1(); //返回具體產(chǎn)品的實例對象;} else if("type2".equals(type)){ return new ConcreteProductA2(); //返回具體產(chǎn)品的實例對象;} else{ return null; //如果沒有匹配的產(chǎn)品類型則返回null;}};客戶端調(diào)用示例:public static void main(String[] args){ Product product = getProduct("type1"); product.use(); //調(diào)用具體產(chǎn)品的業(yè)務(wù)邏輯方法;product = getProduct("type2"); product.use(); //調(diào)用具體產(chǎn)品的業(yè)務(wù)邏輯方法;product = getProduct("type3"); product.use(); //如果沒有匹配的產(chǎn)品類型則返回null;}System.out.println("main method end");return;}};
當(dāng)前名稱:java工廠模式應(yīng)用場景舉例
文章轉(zhuǎn)載:http://www.5511xx.com/article/dhshpss.html


咨詢
建站咨詢
