工廠模式

在工廠模式中洼哎,我們?cè)趧?chuàng)建對(duì)象時(shí)不會(huì)對(duì)客戶端暴露創(chuàng)建邏輯,并且是通過使用一個(gè)共同的接口來(lái)指向新創(chuàng)建的對(duì)象榆俺。

簡(jiǎn)單工廠模式

簡(jiǎn)單工廠模式是由一個(gè)工廠對(duì)象決定產(chǎn)生出哪一類產(chǎn)品類的實(shí)例暂殖。

實(shí)現(xiàn)一個(gè)基本的工廠模式

public interface ICourse {
    public void record();
}

public class JavaCourse implements ICourse {
    @Override
    public void record() {
        System.out.println("Java課程");
    }
}

public class PythonCourse implements ICourse{

    @Override
    public void record() {
        System.out.println("Python course");
    }
}

//調(diào)用
public static void main(String[] args) {
        ICourse course = new JavaCourse();
        course.record();
    }

如果業(yè)務(wù)拓展,我們的課程越來(lái)越多,那么我們的代碼就會(huì)顯得很笨重斋扰。因此渡八,想辦法把依賴減弱,把實(shí)現(xiàn)細(xì)節(jié)隱藏起來(lái)传货。

//創(chuàng)建一個(gè)課程工廠
public class CourseFactory {

    public ICourse getCourse(String name) {
        switch (name) {
            case "Java":
                return new JavaCourse();
            case "Python":
                return new PythonCourse();
            default:
                throw new RuntimeException("沒有該課程");
        }
    }
}

//修改調(diào)用方法
public static void main(String[] args) {
        CourseFactory courseFactory = new CourseFactory();
        courseFactory.getCourse("Java").record();
    }

客戶端變簡(jiǎn)單了屎鳍,但是每次新增課程,都要在CourseFactory中修改邏輯问裕,不符合開閉原則逮壁。我們要繼續(xù)修改,在這里用到了反射粮宛。

public class CourseFactory {

    public ICourse getCourse(Class<? extends ICourse> clazz) {
        try {
            if (clazz!= null){
                return clazz.newInstance();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

public static void main(String[] args) {
        CourseFactory courseFactory = new CourseFactory();
        courseFactory.getCourse(JavaCourse.class).record();
    }

抽象工廠模式

抽象工廠模式(Abstract Factory Pattern)是圍繞一個(gè)超級(jí)工廠創(chuàng)建其他工廠窥淆。該超級(jí)工廠又稱為其他工廠的工廠。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式巍杈,它提供了一種創(chuàng)建對(duì)象的最佳方式忧饭。
在抽象工廠模式中,接口是負(fù)責(zé)創(chuàng)建一個(gè)相關(guān)對(duì)象的工廠筷畦,不需要顯式指定它們的類词裤。每個(gè)生成的工廠都能按照工廠模式提供對(duì)象。


課程工廠實(shí)現(xiàn)

FactoryProducer 用來(lái)提供創(chuàng)建工廠的方法鳖宾,筆記工廠和課程工廠分別提供筆記和課程吼砂。

超級(jí)工廠類:

public interface AbstractFactory {

    public ICourse getCourse(String course);

    public INote getNote(String note);

}

課程工廠類:

public class CourseFactory implements AbstractFactory{


    @Override
    public ICourse getCourse(String course) {
        switch (course){
            case "JavaCourse":
                return new JavaCourse();
            default:
                throw new RuntimeException("no such Course");
        }
    }

    @Override
    public INote getNote(String note) {
        return null;
    }

}

筆記工廠類:

public class NoteFactory implements AbstractFactory {
    @Override
    public ICourse getCourse(String course) {
        return null;
    }

    @Override
    public INote getNote(String note) {
        switch (note) {
            case "JavaNote":
                return new JavaNote();
            default:
                throw new RuntimeException("no such Note");
        }
    }
}

課程工廠和筆記工廠都是圍繞超級(jí)工廠創(chuàng)建的類。

課程接口:

public interface ICourse {

    public void createCourse();

}

課程實(shí)現(xiàn)類:

public class JavaCourse implements ICourse{

    @Override
    public void createCourse() {
        System.out.println("JavaCourse");
    }
}

調(diào)用過程

public static void main(String[] args) {
        AbstractFactory factory = FactoryProducer.getFactory("Course");
        ICourse course =factory.getCourse("JavaCourse");
        course.createCourse();
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鼎文,一起剝皮案震驚了整個(gè)濱河市渔肩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拇惋,老刑警劉巖周偎,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異撑帖,居然都是意外死亡栏饮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門磷仰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)袍嬉,“玉大人,你說(shuō)我怎么就攤上這事∷磐ǎ” “怎么了箍土?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)罐监。 經(jīng)常有香客問我吴藻,道長(zhǎng),這世上最難降的妖魔是什么弓柱? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任沟堡,我火速辦了婚禮,結(jié)果婚禮上矢空,老公的妹妹穿的比我還像新娘航罗。我一直安慰自己,他們只是感情好屁药,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布粥血。 她就那樣靜靜地躺著,像睡著了一般酿箭。 火紅的嫁衣襯著肌膚如雪复亏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天缭嫡,我揣著相機(jī)與錄音缔御,去河邊找鬼。 笑死妇蛀,一個(gè)胖子當(dāng)著我的面吹牛刹淌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播讥耗,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼疹启!你這毒婦竟也來(lái)了古程?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤喊崖,失蹤者是張志新(化名)和其女友劉穎挣磨,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荤懂,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茁裙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了节仿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晤锥。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矾瘾,到底是詐尸還是另有隱情女轿,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布壕翩,位于F島的核電站蛉迹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏放妈。R本人自食惡果不足惜北救,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芜抒。 院中可真熱鬧珍策,春花似錦、人聲如沸挽绩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)唉堪。三九已至模聋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唠亚,已是汗流浹背链方。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留灶搜,地道東北人祟蚀。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像割卖,于是被迫代替她去往敵國(guó)和親前酿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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

  • 工廠模式是我們最常用的實(shí)例化對(duì)象模式了鹏溯,是用工廠方法代替new操作的一種模式罢维。通常我們所說(shuō)的工廠模式是指工廠方法模...
    zfylin閱讀 1,310評(píng)論 0 7
  • 該文章屬于劉小壯原創(chuàng),轉(zhuǎn)載請(qǐng)注明:劉小壯[http://www.reibang.com/u/2de707c93d...
    劉小壯閱讀 12,744評(píng)論 29 59
  • 今天學(xué)習(xí)下最常見的工廠模式丙挽,工廠模式細(xì)分下來(lái)有三大類: 他們的目標(biāo)都是一樣的:封裝對(duì)象的創(chuàng)建肺孵。但是實(shí)現(xiàn)手段和使用場(chǎng)...
    西木柚子閱讀 2,141評(píng)論 7 28
  • 觸 不知你有沒有這樣的感觸,明明是很多人的時(shí)候卻...
    去個(gè)名字還被占用了閱讀 70評(píng)論 0 1
  • 一.我學(xué)到了什么 1.寫作的目的 最初學(xué)習(xí)寫作的目的是想要學(xué)習(xí)一項(xiàng)新技能颜阐,期待能寫出爆文的能力平窘。 沒錯(cuò),我學(xué)習(xí)的目...
    麗榮冰荷閱讀 2,601評(píng)論 0 7