簡(jiǎn)單工廠模式

Java23種設(shè)計(jì)模式--簡(jiǎn)單工廠模式

一枉阵、什么是簡(jiǎn)單工廠模式

  • 簡(jiǎn)單工廠模式屬于類的創(chuàng)建型模式,又叫做靜態(tài)工廠方法模式译红。通過(guò)專門定義一個(gè)類來(lái)負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的
    父類兴溜。

二侦厚、模式中包含的角色及其職責(zé)

1. 工廠(Creator)角色簡(jiǎn)單工廠模式的核心,它負(fù)責(zé)實(shí)現(xiàn)創(chuàng)建所有實(shí)例的內(nèi)部邏輯拙徽。工廠類可以被外界直接調(diào)用刨沦,創(chuàng)建所需的產(chǎn)品對(duì)象。

2. 抽象(Product)角色簡(jiǎn)單工廠模式所創(chuàng)建的所有對(duì)象的父類膘怕,它負(fù)責(zé)描述所有實(shí)例所共有的公共接口想诅。

3. 具體產(chǎn)品(Concrete Product)角色簡(jiǎn)單工廠模式所創(chuàng)建的具體實(shí)例對(duì)象

三、Demo

工廠(Creator)角色

package com.stark.model;

public  class FruitFactory{

    /**
     * 最簡(jiǎn)單的寫法
     * @return Fruit的實(shí)例對(duì)象
     */
    public static Fruit getApple() {
        return new Apple();
    }
    
    public static Fruit getBanana() {
        return new Banana();
    }
    
    /**
     * 通過(guò)類型判斷
     * @param fruit的實(shí)例對(duì)象
     * @return fruit的實(shí)例對(duì)象
     */
    public static Fruit getInstance(Fruit fruit) {
        if(fruit instanceof Apple) {
            return new Apple();
        }else if(fruit instanceof Banana){
            return new Banana();
        }else {
            System.out.println("找不到該類");
            return null;
        }
    }
    
    public static Fruit getFruit(String type) {
        if(type.equalsIgnoreCase("apple")) {
            return new Apple();
        }else if (type.equalsIgnoreCase("banana")) {
            return new Banana();
        }else {
            System.out.println("找不到該類");
            return null;
        }
    }
    /**
     * 演化寫法
     * @param type
     * @return
     * @throws InstantiationException
     * @throws IllegalAccessException
     */
    public static Fruit createFruit(String type) throws InstantiationException, IllegalAccessException {
        if(type.equalsIgnoreCase("apple")) {
            return Apple.class.newInstance();
        }else if (type.equalsIgnoreCase("banana")) {
            return Banana.class.newInstance();
        }else {
            System.out.println("找不到該類");
            return null;
        }
    }
    
    public static Fruit initFruit(String type) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
        Class fruit = Class.forName(type);
        return (Fruit) fruit.newInstance();
    }
    /**
     * 最高級(jí)寫法
     * @param clazz
     * @return
     * @throws InstantiationException
     * @throws IllegalAccessException
     */
    public static Fruit buildFruit(Class<?> clazz) throws InstantiationException, IllegalAccessException {
        return (Fruit) clazz.newInstance();
    }
}

抽象(Product)角色

package com.stark.model;

public interface Fruit {
    void get();
}

具體產(chǎn)品(Concrete Product)角色

package com.stark.model;

public class MainClass {

    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
        Fruit apple = FruitFactory.getInstance(new Apple());
        apple.get();
        
        Fruit apples = FruitFactory.buildFruit(Apple.class);
        apples.get();
    }
    
}

四岛心、簡(jiǎn)單工廠模式的優(yōu)缺點(diǎn)

  • 在這個(gè)模式中来破,工廠類是整個(gè)模式的關(guān)鍵所在。它包含必要的判斷
    邏輯忘古,能夠根據(jù)外界給定的信息徘禁,決定究竟應(yīng)該創(chuàng)建哪個(gè)具體類的
    對(duì)象。用戶在使用時(shí)可以直接根據(jù)工廠類去創(chuàng)建所需的實(shí)例髓堪,而無(wú)
    需了解這些對(duì)象是如何創(chuàng)建以及如何組織的送朱。有利于整個(gè)軟件體系
    結(jié)構(gòu)的優(yōu)化。

  • 不難發(fā)現(xiàn)干旁,簡(jiǎn)單工廠模式的缺點(diǎn)也正體現(xiàn)在其工廠類上驶沼,由于工廠類集中
    了所有實(shí)例的創(chuàng)建邏輯,所以“高內(nèi)聚”方面做的并不好争群。另外商乎,當(dāng)系統(tǒng)中的
    具體產(chǎn)品類不斷增多時(shí),可能會(huì)出現(xiàn)要求工廠類也要做相應(yīng)的修改祭阀,擴(kuò)展
    性并不很好鹉戚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市专控,隨后出現(xiàn)的幾起案子抹凳,更是在濱河造成了極大的恐慌,老刑警劉巖伦腐,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赢底,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡柏蘑,警方通過(guò)查閱死者的電腦和手機(jī)幸冻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)咳焚,“玉大人洽损,你說(shuō)我怎么就攤上這事「锇耄” “怎么了碑定?”我有些...
    開(kāi)封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)又官。 經(jīng)常有香客問(wèn)我延刘,道長(zhǎng),這世上最難降的妖魔是什么六敬? 我笑而不...
    開(kāi)封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任碘赖,我火速辦了婚禮,結(jié)果婚禮上外构,老公的妹妹穿的比我還像新娘普泡。我一直安慰自己,他們只是感情好典勇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布劫哼。 她就那樣靜靜地躺著,像睡著了一般割笙。 火紅的嫁衣襯著肌膚如雪权烧。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天伤溉,我揣著相機(jī)與錄音般码,去河邊找鬼。 笑死乱顾,一個(gè)胖子當(dāng)著我的面吹牛板祝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播走净,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼券时,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼孤里!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起橘洞,我...
    開(kāi)封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤捌袜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后炸枣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體虏等,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年适肠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霍衫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡侯养,死狀恐怖敦跌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沸毁,我是刑警寧澤峰髓,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站息尺,受9級(jí)特大地震影響携兵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搂誉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一徐紧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炭懊,春花似錦并级、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至父阻,卻和暖如春愈涩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背加矛。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工履婉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斟览。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓毁腿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子已烤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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