黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 抽象工廠模式和工廠模式區別

抽象工廠模式和工廠模式區別

更新時間:2022-10-26 09:28:49 來源:動力節點 瀏覽1044次

抽象工廠模式和工廠模式區別有哪些?小編來告訴大家。

簡單工廠模式

簡單工廠說白了就是一個超級工廠,他可以生產各種各樣的產品,產品之間無關聯,比如:

public interface SimpleFactory {
    //生產一個冰箱
    Refrigerator createRefiger();
    //生產一個空調
    AirConditioning createAirConditioning();
    //生產一個 TV
    TV createTV();
}

一般也會有一個默認的實現:

public class DefaultSimpleFactory implements SimpleFactory{
    @Override
    public Refrigerator createRefiger() {
        return new Refrigerator();
    }
    @Override
    public AirConditioning createAirConditioning() {
        return new AirConditioning();
    }
    @Override
    public TV createTV() {
        return new TV();
    }
}

這就是一個簡單工廠模式,非常的簡單,還沒有很強的抽象性。

Spring 的 BeanFactory 其實就是一個簡單工廠模式,他定義了一個 BeanFactory 工廠,然后會有 DefaultListableBeanFactory 去實現這個工廠聲明的所有能力。

工廠方法模式

其實理論上來說,可以把簡單工廠模式理解為工廠方法模式的一種特例,將他的那個超級大工廠拆分成多個工廠就是工廠方法模式了。

同樣有一個抽象接口表述一個工廠:

public interface MethodFactory {
    //生產一個冰箱
    Refrigerator createRefiger();
    //生產一個空調
    AirConditioning createAirConditioning();
    //生產一個 TV
    TV createTV();
}

簡單工廠是用一個 DefaultFactory 完成了工廠所有的能力要求。但是現在我們的廠家變多了,有格力冰箱、海爾冰箱、海信冰箱等等,他們生產的冰箱或空調都不一樣,如果用簡單工廠的話,就需要做區分,增加更多的方法,生產格力冰箱的,生產海爾冰箱的,非常的丑陋。

工廠方法模式,需要區分不同的工廠,這里我們創建格力工廠、海爾工廠和海信工廠。

public class GeliFactory implements MethodFactory {
    @Override
    public Refrigerator createRefiger() {
        return new GeliRefrigerator();
    }
    @Override
    public AirConditioning createAirConditioning() {
        return new GeliAirConditioning();
    }
    @Override
    public TV createTV() {
        return new GeliTV();
    }
}

格力工廠返回的是格力的空調、格力的冰箱以及格力的電視機,海爾和海信也都會返回他們自己品牌的產品,這里就不貼他們的代碼了,類似。

這樣,我們的工廠方法對外提供了生產產品的能力,具體產生何種類型的產品,將由具體的工廠決定。這就是工廠方法模式,相信大部分人應該都不陌生。

Logpack 中就有一個典型的工廠方法,工廠抽象類 ILoggerFactory:

public interface ILoggerFactory {
    Logger getLogger(String var1);
}

他有兩個具體的工廠實現這個 getLogger 方法,

public class NOPLoggerFactory implements ILoggerFactory {
    public NOPLoggerFactory() {
    }
    public Logger getLogger(String name) {
        return NOPLogger.NOP_LOGGER;
    }
}
public class SubstituteLoggerFactory 
            implements ILoggerFactory {
    //省略
    public synchronized Logger getLogger(String name) {
        SubstituteLogger logger = (SubstituteLogger)this.loggers.get(name);
        if (logger == null) {
            logger = new SubstituteLogger(name, this.eventQueue, this.postInitialization);
            this.loggers.put(name, logger);
        }
        return logger;
    }//省略。。。。。
}

抽象工廠模式

抽象工廠模式可能不如前兩者常見,但是確是為了補充前兩者的,有特定的場景。

想象這么一種情況,你使用了工廠方法模式,你的工廠提供的能力非常多,可以生產冰箱、電視、空調、洗衣機、電腦以及桌子等等,這樣你就會產生很多的工廠。

抽象工廠的作用就是在一定前提下,幫你分類這些工廠,比如按品牌分類,或者按照價格等級分類,這樣會大大縮減系統中的工廠數量。

這個前提就是你的這些工廠需要在兩個維度上具備共性:

專業術語就是『產品等級』和『產品族』兩個概念,說人話就是,這些工廠需要至少具有兩個共性,比如都可以按照類型區分成三類,電視機、冰箱和空調,也可以按照品牌區分成海爾、海信和 TCL。

這樣他們就具備抽象工廠的前提條件,你可以按照產品族合并工廠,正如上面使用到的例子一樣,工廠對外提供生產電視、冰箱和空調三種能力,而系統按品牌存在三個工廠,所以從準確來說,在工廠方法中使用的例子其實也是加強版的抽象工廠模式

代碼例子就不舉例了,抽象工廠其實就是幫助減少系統的工廠數量的,但前提條件就是這些工廠要具備兩個及以上的共性。

希望你被面試官問道工廠方法和抽象工廠的區別的時候,能想起這一句話。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 天天拍夜夜添久久精品中文 | 国产一区在线观看视频 | 欧美乱爱 | 精品国产一区二区三区香蕉 | 男女性色大片免费网站 | 亚洲欧美网 | 欧美色图日韩 | 国产制服丝袜在线 | 免费777my性欧美另类 | 亚洲国产精品毛片∧v卡在线 | 国产成人精品怡红院 | 在线观看免费黄网站 | 亚洲图片色图 | 成人午夜免费福利视频 | 狠狠狠操 | 午夜影院黄 | a级毛片免费网站 | 日韩不卡手机视频在线观看 | 欧美私人网站 | 情人边吃奶边做好爽嗷嗷叫 | 在线看你懂| 国产精品久久二区三区色裕 | 特级全黄| free性欧美淫俄罗斯 | 欧美一区二区三区视频在线观看 | 欧美在线视频一区二区三区 | 国产成人精品视频2021 | 久久综合九色综合欧美就去吻 | 国产伦码精品一区二区三区 | 日韩黄在线观看免费视频 | 国产成人a在一区线观看高清 | 动漫美女h黄18动漫免费观看 | 国内偷自视频区视频综合 | 欧美一区二区在线播放 | 亚洲欧美日韩中文综合v日本 | 亚洲aaaa级特黄毛片 | 欧美福利视频导航 | 韩国理伦伦片在线观看 | 欧美激情视频二区三区 | 快播制服丝袜 | 国产白丝在线 |