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

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

靜態工廠模式的介紹

更新時間:2022-11-24 10:00:59 來源:動力節點 瀏覽936次

靜態工廠模式是一種改進的獲取實例的方法。

通常我們會使用new關鍵字調用類的構造方法來創建一個對象,靜態工廠模式相對于傳統的創建對象的方式有以下優點:

1. 可以更加富有語義的創建實例:

當一個類的構造方法有非常多的參數或被重載過很多次的話,因為JAVA對構造方法命名的規定(與類名相同),我們必須編寫多個命名相同但實際不同的構造函數,在創建對象時很難區分我們應該調用哪個構造方法。

比如在實際生產中,我們會經常見到以下方法:

newInstance():獲取一個新的對象

valueOf():獲取一個值為..的對象

getInstance():獲取一個對象緩存池中的對象或單例對象

甚至我們可以更加細分,比如有一個Person類,我們想根據年齡來獲取不同的對象,則可有如下靜態工廠方法:

getChild():獲取一個兒童對象

getOld():獲取一個老年對象

getYouth():獲取一個青年對象

等等,比起new關鍵字,顯然使用上述方法獲取對象更加具有可讀性,使我們對創造的實例類型更可控。

2. 不必每次調用都創建新的對象

當一個類的對象會被頻繁使用,且沒有必要在每次使用時都生成新的對象時,我們會考慮使用單例模式。單例模式大多是由靜態工廠實現的,我們可以在工廠內部控制新生成實例或返回已有實例。

比如,DCL單例模式獲取對象時就是采用了靜態工廠:

public class Car {
    //構造函數私有,禁止通過常規方式實例化
    private Car(){}
    //單例對象的引用
    static volatile Car car=null;
    //DCL獲取單例對象,靜態工廠方法
    static Car getInstance(){
        if(car==null){
            synchronized(Car.class){
                if(car==null){
                    car=new Car();
                }
            }
        }
        return car;
    }
    private Object readResolve() {
        return getCar();
    }
}

3. 可以返回原返回類型的子類

我們可以通過靜態工廠返回一個類型的所有子類,可以更加靈活的獲取實例。這也符合了兩大設計原則:里氏替換原則與依賴倒置原則。即所有父類可以出現的地方子類也可以出現,以及類的使用方不應該依賴具體的實現類,而應該依賴繼承鏈的頂端(接口或抽象類),即依賴抽象。

從Car中我們可以獲取Bus和Taxi兩個子類的實例,其它類在使用時只需維護一個Car的引用,至于具體用Bus還是用Taxi只由獲取實例的那行代碼決定,我們可以在只更換實例的獲取而不改變其它代碼(業務邏輯)的情況下修改代碼。

public class Car{
    public static Car getBus(){
        return new Bus();
    }
    public static Car getTaxi(){
        return new Taxi();
    }
}
public class bus extends Car{
}
public class taxi extends Car{
}

4. 在創建帶泛型的參數時,使代碼更簡潔

這條主要是針對帶泛型類的繁瑣聲明而說的,需要重復書寫兩次泛型參數:

  Map<String,Date> map = new HashMap<String,Date>();

不過自從 java7 開始,這種方式已經被優化過了 —— 對于一個已知類型的變量進行賦值時,由于泛型參數是可以被推導出,所以可以在創建實例時省略掉泛型參數。

  Map<String,Date> map = new HashMap<>();

所以這個問題實際上已經不存在了。大家如果想了解更多相關知識,不妨來關注一下本站的Java設計模式,里面還有更豐富的知識等著大家去學習,相信對大家一定能夠有所幫助。

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 欧美成人香蕉网在线观看 | 狠狠色狠狠色综合系列 | 欧美日本国产 | 亚洲视频 欧美视频 | 免费黄色的网站 | 免费黄色短视频 | 久久91亚洲精品中文字幕 | 亚洲午夜一区二区三区 | 日本在线小视频 | 黄色免费观看网站 | 射影院| 亚洲不卡免费视频 | 黄 色 三 级 网站 | 日日干天天操 | 视色视色| xh98hx国产在线视频 | 欧美极品欧美精品欧美视频 | 国产三级毛片 | 国产亚洲精品高清在线 | 国产成人夜间影院在线观看 | 日韩欧美第一页 | 国产日韩欧美在线 | 国产成人久久精品麻豆二区 | 免费高清a级毛片在线播放 免费高清欧美一区二区视频 | 欧美极品在线 | 天天操天天操天天操 | 成人小视频免费在线观看 | 天天摸夜夜添狠狠添2018 | 亚洲精品成人av在线 | 成人伦理在线观看 | 无人区理论片手机看片 | 欧美成人观看免费完全 | 波多野结衣在线免费观看视频 | 日日噜噜夜夜狠狠视频buoke | 立即播放免费毛片一级 | 天天射综合网站 | 欧美aaaa在线观看视频免费 | 精品国产_亚洲人成在线高清 | 青草视频网 | 天天摸日日添狠狠添婷婷 | 欧美日韩国产一区二区三区伦 |