考慮用靜態(tài)工廠方法替代構(gòu)造器

1. 通常我們創(chuàng)建對象的方法有兩種:

a. 使用類公有的構(gòu)造器

b. 使用類的靜態(tài)方法返回一個實例對象

2. 靜態(tài)方法的優(yōu)點:

a. 靜態(tài)工廠方法的名字由自己命名哟玷,而構(gòu)造方法必須與類名相同

//使用構(gòu)造器方法獲取到一個素數(shù)
BigInteger prime = new BigInteger(int, int ,Random);
//使用靜態(tài)工廠方法
BigInteger prime = BigInteger.probablePrime(int, Random);
BigInteger.png

我們可以看到明顯我們使用靜態(tài)方法可以明確知道我們要獲取到的是一個素數(shù)房揭。

b. 構(gòu)造方法每次調(diào)用都會創(chuàng)建一個對象胁附,而靜態(tài)工廠方法則不會每次調(diào)用時都創(chuàng)建要給對象罗岖。**靜態(tài)方法通常會使用預先構(gòu)建好的實例或者將構(gòu)建好的實例緩存起來扬蕊,進行重復利用治宣,從而避免創(chuàng)建不必要的重復對象右犹,比如我們常見的單例模式提澎。****

public class Singleton {
    /*
     * 利用一個靜態(tài)變量來記錄Singleton類的唯一實例
     */
    private static Singleton uniqueInstance;
    /*
     * 聲明為private,使得只有Singleton類內(nèi)才可以調(diào)用構(gòu)造器
     */
    private Singleton(){}
    /*
     * 通過該方法實例化對象念链,并返回這個實例
     */
    public static Singleton getInstance(){
        if (uniqueInstance == null){
            uniqueInstance = new Singleton();
        } 
        return uniqueInstance;
    }
}

c. 靜態(tài)工廠方法可以返回原返回類型的任何子類型對象盼忌,這樣在我們選擇返回對象的類時就有了更大的靈活性

public class Shape {

    private Shape(){

    }
    //根據(jù)類型決定返回的對象
    public static Shape newInstance(String type){
        if (type.equalsIgnoreCase("triangle")){
            return new Triangle();
        } else if (type.equalsIgnoreCase("circle")){
            return new Circle();
        }
        return new Shape();
    }

    public void getName(){
        System.out.println("My name is shape");
    }

    private static class Triangle extends Shape{
        public void getName(){
            System.out.println("My name is triangle");
        }
    }

    private static class Circle extends Shape{
        public void getName(){
            System.out.println("My name is circle");
        }
    }
}

測試:

public static void main(String[] args){
        Shape shape = Shape.newInstance("");
        Shape triangle = Shape.newInstance("triangle");
        Shape circle = Shape.newInstance("circle");
        shape.getName();
        triangle.getName();
        circle.getName();
    }

測試結(jié)果:

My name is shape
My name is triangle
My name is circle

d. 靜態(tài)方法在創(chuàng)建參數(shù)化類型實例時,可以使代碼更加簡潔

//構(gòu)造方法
Map<String,List<String>> map = new HashMap<String,List<String>>();
//靜態(tài)方法
public static <K,V> HashMap<K,V> newInstance(){
  return new HashMap<K,V>();
}
Map<String,List<String>> map = HashMap.newInstance();

但實際上钓账,現(xiàn)在Java最新的版本已經(jīng)構(gòu)造函數(shù)已經(jīng)不需要補充參數(shù)了碴犬。

HashMap<String,List<String>> map = new HashMap<>();
靜態(tài)方法的缺點:

a. 類如果不含有公有的類或者受保護的構(gòu)造器,就不能被子類化

b. 它們與其他的靜態(tài)方法實際上沒什么區(qū)別梆暮,因此我們約定了一些靜態(tài)工廠方法的常用名稱

static_name
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末服协,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子啦粹,更是在濱河造成了極大的恐慌偿荷,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唠椭,死亡現(xiàn)場離奇詭異跳纳,居然都是意外死亡,警方通過查閱死者的電腦和手機贪嫂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門寺庄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人力崇,你說我怎么就攤上這事斗塘。” “怎么了亮靴?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵馍盟,是天一觀的道長。 經(jīng)常有香客問我茧吊,道長贞岭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任搓侄,我火速辦了婚禮瞄桨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘讶踪。我一直安慰自己讲婚,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布俊柔。 她就那樣靜靜地躺著筹麸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雏婶。 梳的紋絲不亂的頭發(fā)上物赶,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音留晚,去河邊找鬼酵紫。 笑死,一個胖子當著我的面吹牛错维,可吹牛的內(nèi)容都是我干的奖地。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼赋焕,長吁一口氣:“原來是場噩夢啊……” “哼参歹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起隆判,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤犬庇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侨嘀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體臭挽,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年咬腕,在試婚紗的時候發(fā)現(xiàn)自己被綠了欢峰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡涨共,死狀恐怖纽帖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情煞赢,我是刑警寧澤抛计,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站照筑,受9級特大地震影響吹截,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凝危,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一刺彩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧弃锐,春花似錦瑰排、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽趁窃。三九已至,卻和暖如春急前,著一層夾襖步出監(jiān)牢的瞬間醒陆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工裆针, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刨摩,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓世吨,卻偏偏與公主長得像澡刹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子耘婚,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容