日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
java工廠模式應(yīng)用場(chǎng)景舉例

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

10年積累的成都網(wǎng)站建設(shè)、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有龍子湖免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

一、簡(jiǎn)單工廠模式

簡(jiǎn)單工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種創(chuàng)建對(duì)象的最佳方式,在簡(jiǎn)單工廠模式中,一個(gè)工廠類負(fù)責(zé)創(chuàng)建其他類的實(shí)例,這種模式的主要優(yōu)點(diǎn)是可以在不修改客戶端代碼的情況下,增加新的產(chǎn)品族。

應(yīng)用場(chǎng)景:

1. 當(dāng)產(chǎn)品族的接口不固定時(shí),可以使用簡(jiǎn)單工廠模式,有一組具有相似功能的類,但它們的接口可能不同,通過(guò)使用簡(jiǎn)單工廠模式,可以根據(jù)需要?jiǎng)?chuàng)建不同的類實(shí)例。

2. 當(dāng)需要根據(jù)參數(shù)來(lái)決定創(chuàng)建哪個(gè)類的實(shí)例時(shí),可以使用簡(jiǎn)單工廠模式,根據(jù)用戶輸入的配置信息,創(chuàng)建相應(yīng)的類實(shí)例。

3. 當(dāng)系統(tǒng)需要維護(hù)一個(gè)固定的產(chǎn)品族,而又不希望修改客戶端代碼時(shí),可以使用簡(jiǎn)單工廠模式,系統(tǒng)中有一個(gè)打印機(jī)類的固定產(chǎn)品族,可以通過(guò)簡(jiǎn)單工廠模式動(dòng)態(tài)地創(chuàng)建不同類型的打印機(jī)實(shí)例。

4. 當(dāng)需要隱藏創(chuàng)建對(duì)象的具體過(guò)程時(shí),可以使用簡(jiǎn)單工廠模式,數(shù)據(jù)庫(kù)連接池中的連接對(duì)象創(chuàng)建過(guò)程較為復(fù)雜,可以通過(guò)簡(jiǎn)單工廠模式將這個(gè)過(guò)程封裝起來(lái),讓客戶端只需要關(guān)注使用連接對(duì)象即可。

下面通過(guò)一個(gè)簡(jiǎn)單的示例來(lái)說(shuō)明簡(jiǎn)單工廠模式的實(shí)現(xiàn):

// 簡(jiǎ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è)計(jì)模式,它定義了一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類,工廠方法使一個(gè)類的實(shí)例化延遲到其子類,在工廠方法模式中,我們只需要關(guān)心如何創(chuàng)建對(duì)象,而不需要關(guān)心對(duì)象的具體實(shí)現(xiàn),這樣可以降低系統(tǒng)的耦合度,提高代碼的可擴(kuò)展性。

1. 當(dāng)需要根據(jù)不同的條件創(chuàng)建不同類型的對(duì)象時(shí),可以使用工廠方法模式,根據(jù)用戶的權(quán)限等級(jí)來(lái)決定用戶可以訪問(wèn)哪些功能模塊。

2. 當(dāng)需要為每個(gè)產(chǎn)品提供一個(gè)單一的公共接口,而又需要讓子類可以改變其具體實(shí)現(xiàn)時(shí),可以使用工廠方法模式,Java中的IO流操作都是通過(guò)InputStream和OutputStream接口來(lái)實(shí)現(xiàn)的,而具體的實(shí)現(xiàn)由不同的類來(lái)完成。

3. 當(dāng)一個(gè)類需要?jiǎng)?chuàng)建其子類的實(shí)例時(shí),可以使用工廠方法模式,一個(gè)游戲引擎需要?jiǎng)?chuàng)建游戲中的各種角色、物體等實(shí)例時(shí),可以將這些實(shí)例的創(chuàng)建交給游戲引擎本身來(lái)完成。

4. 當(dāng)一個(gè)類的內(nèi)部結(jié)構(gòu)在初始化時(shí)是不可變的,但又需要提供一個(gè)統(tǒng)一的接口給外部使用時(shí),可以使用工廠方法模式,Java中的Calendar類就采用了這種模式,它的內(nèi)部結(jié)構(gòu)在初始化后就不可改變了,但提供了一個(gè)統(tǒng)一的Date接口供外部調(diào)用。

下面通過(guò)一個(gè)簡(jiǎn)單的示例來(lái)說(shuō)明工廠方法模式的實(shí)現(xiàn):

// 抽象產(chǎn)品接口
interface Product {
    void use();
}

// 具體產(chǎn)品A1實(shí)現(xiàn)抽象產(chǎn)品接口
class ConcreteProductA1 implements Product {
    @Override
    public void use() {
        System.out.println("ConcreteProductA1 is using.");
    }
}

// 具體產(chǎn)品A2實(shí)現(xiàn)抽象產(chǎn)品接口
class ConcreteProductA2 implements Product {
    @Override
    public void use() {
        System.out.println("ConcreteProductA2 is using.");
    }
}

// 具體工廠A1實(shí)現(xiàn)生產(chǎn)者接口(SimpleFactory)并返回具體產(chǎn)品A1的實(shí)例對(duì)象;具體工廠A2同理。此處省略具體實(shí)現(xiàn)細(xì)節(jié)。最終客戶端只需調(diào)用getProduct()方法獲取具體產(chǎn)品即可:public static Product getProduct(String type){ if("type1".equals(type)){ return new ConcreteProductA1(); //返回具體產(chǎn)品的實(shí)例對(duì)象;} else if("type2".equals(type)){ return new ConcreteProductA2(); //返回具體產(chǎn)品的實(shí)例對(duì)象;} 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;}};

分享標(biāo)題:java工廠模式應(yīng)用場(chǎng)景舉例
鏈接分享:http://www.dlmjj.cn/article/dhshpss.html