成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

我的Java設(shè)計模式-工廠方法模式

QiuyueZhong / 2743人閱讀

摘要:工廠方法模式和策略的模式有什么區(qū)別區(qū)別在于,策略模式強調(diào)的是提供不同的策略方案,而工廠方法模式強調(diào)的是產(chǎn)品本身。

女朋友dodo鬧脾氣,氣勢洶洶的說“我要吃雪糕”。筆者心里啊樂滋滋的,一支雪糕就能哄回來,不亦樂乎?!

但是,雪糕買回來了,她竟然說“不想吃雪糕了,突然想吃披薩”。呵呵了,憋了一股勁“沒問題”,又屁顛屁顛的去把披薩買回來。

世事難料,dodo同學又放大招了,“披薩太上火了,我要吃芝士蛋糕”。

這時候,工廠方法模式該上場了,使用它可以完美的解決不斷的產(chǎn)品變更。工廠方法模式是怎么樣的?而工廠模式又是怎樣解決產(chǎn)品變更呢?一起來看看...

一、工廠方法模式 定義

??定義一個創(chuàng)建對象的工廠接口,工廠方法將實例化推遲到子類中。

定義總是抽象的,先放出工廠方法模式的UML圖如下所示:

從上圖可以看出,工廠方法模式涉及到以下四個角色的概念:

??- 抽象工廠角色:工廠方法模式的核心,創(chuàng)建產(chǎn)品的工廠類必須實現(xiàn)該接口。

??- 具體工廠角色:該角色實現(xiàn)了抽象工廠接口,具體如何創(chuàng)建產(chǎn)品類就是在該實現(xiàn)類完成。

??- 抽象產(chǎn)品角色:所有產(chǎn)品類的超類,負責實現(xiàn)產(chǎn)品共性的抽象定義。

??- 具體產(chǎn)品角色:該角色實現(xiàn)了抽象產(chǎn)品接口,負責具體的不同產(chǎn)品業(yè)務(wù)邏輯。

二、實戰(zhàn) 上代碼

抽象工廠角色代碼如下:

public interface Factory {

    // 傳入?yún)?shù)的是產(chǎn)品類型,這里返回產(chǎn)品類的抽象工廠類Product    
    public Product factory(String productType);

}

這里做出生產(chǎn)雪糕、披薩的工廠,有了工廠才能生產(chǎn)對應的產(chǎn)品,具體工廠角色代碼如下:

// 雪糕的工廠,負責生產(chǎn)雪糕
public class IceCreamFactory implements Factory {

    @Override
    public Product factory() {
        return new IceCream();
    }

}

上面看到抽象角色Product,看代碼:

public interface Product {

    public void product();

}

具體角色代碼如下:

public class IceCream implements Product {

    @Override
    public void product() {

        /**
         *  具體的業(yè)務(wù)邏輯
         */
        System.out.println("雪糕做好了??!");
    }

}

OK,涉及到工廠方式模式系統(tǒng)的代碼基本完成,下面看看客戶端怎么使用工廠模式,雪糕準備就緒:

public class Client {

    public static void main(String[] args){

        // 生產(chǎn)雪糕
        Factory iceCreamFactory = new IceCreamFactory();
        Product iceCream = iceCreamFactory.factory();
        iceCream.product();

    }

}

運行客戶端代碼,結(jié)果如下:

雪糕做好了!!
擴展

雪糕的order已經(jīng)完成!雪糕不吃,吃披薩?OK,現(xiàn)在就做披薩。同樣的先實現(xiàn)抽象工廠和抽象產(chǎn)品角色。

披薩工廠實現(xiàn)如下:

// 披薩的工廠,負責生產(chǎn)披薩
public class PizzaFactory implements Factory {

    @Override
    public Product factory() {
        return new Pizza();
    }

}

接下來就是披薩:

public class Pizza implements Product {

    @Override
    public void product() {
        /**
         *  具體的業(yè)務(wù)邏輯
         */
        System.out.println("披薩做好了?。?);
    }

}

現(xiàn)在我們在客戶端中實現(xiàn)生產(chǎn)披薩,代碼如下:

public class Client {

    public static void main(String[] args){

        // 生產(chǎn)雪糕
        Factory iceCreamFactory = new IceCreamFactory();
        Product iceCream = iceCreamFactory.factory();
        iceCream.product();

        // 生產(chǎn)披薩
        Factory pizzaFactory = new PizzaFactory();
        Product pizza = pizzaFactory.factory();
        pizza.product();
    }

}

運行結(jié)果如下:

雪糕做好了!!

披薩做好了!!

三、工廠方法模式的優(yōu)缺點 優(yōu)點

1)優(yōu)秀的擴展性。假如披薩不想吃了,想吃芝士蛋糕,只需要增加芝士蛋糕的具體工廠和具體產(chǎn)品類,不會影響其他產(chǎn)品的生產(chǎn)。

2)大降低代碼的耦合度,客戶端最終得到的是產(chǎn)品本身,而不需要知道和操作產(chǎn)品的生產(chǎn)過程。

缺點

1)增加新產(chǎn)品時,需要增加具體的工廠類和具體的產(chǎn)品類,當產(chǎn)品數(shù)量多的時候就會造成系統(tǒng)的復雜度增大,也增加了對系統(tǒng)理解的難度。

四、比較

跟策略模式對比:問得最多的一個問題。工廠方法模式和策略的模式有什么區(qū)別?區(qū)別在于,策略模式強調(diào)的是提供不同的策略方案,而工廠方法模式強調(diào)的是產(chǎn)品本身。

策略模式接下來也會說到,把策略模式吃透了,回頭再跟工廠方法模式對比的時候就恍然大悟了。

總結(jié)

首先,上一篇的單例模式很多人都給我提了很不錯的建議,也在這篇文章中改進了。工廠方式模式的使用率也非常高,掌握它對把握系統(tǒng)架構(gòu)會有比較大的提升。下一篇要分享的是:建造者模式

設(shè)計模式Java源碼GitHub下載:https://github.com/jetLee92/DesignPattern

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/67900.html

相關(guān)文章

  • 我的Java設(shè)計模式-策略模式

    摘要:孫臏心里一萬個草泥馬在奔騰,差點沒噎死自己滾一邊去,我們這盤跟他賽馬開始,策略模式上場。在設(shè)計模式之禪中的提出通過策略枚舉和反射機制對策略模式進行改良,膜拜了但是要添加或淘汰策略,還是得去對枚舉進行修改,也不符合開閉原則。 今天給大家說說田忌賽馬的故事。如有雷同,純屬巧合!話說在戰(zhàn)國時期,群雄割據(jù),硝煙四起,茶余飯后還是少不了娛樂活動的,其中賽馬是最火爆的。一天,孫臏看到田忌像個死雞似...

    zilu 評論0 收藏0
  • 工廠模式理解了沒有?

    摘要:我認為按書上的順序比較好理解因為簡單靜態(tài)工廠模式是在工廠方法模式上縮減,抽象工廠模式是在工廠方法模式上再增強。所以我就先講工廠方法模式了。抽象工廠模式抽象工廠模式就比較復雜了,我們一般的應用都寫不到。 前言 只有光頭才能變強 回顧前面: 給女朋友講解什么是代理模式 包裝模式就是這么簡單啦 單例模式你會幾種寫法? 昨天寫了單例模式了,今天是時候?qū)懝S模式啦~ 工廠模式我個人認為其實比...

    蘇丹 評論0 收藏0
  • 我的Java設(shè)計模式-建造者模式

    摘要:汽車本身就是復雜產(chǎn)品對象,其制造過程可以形象的表示建造者模式。另一輛法拉利,。法拉利具體建造者代碼如下構(gòu)造法拉利的第一部分。咻咻法拉利已造好三建造者模式的優(yōu)缺點優(yōu)點降低代碼耦合度。 在未上大學之前,一直有個夢想I have a dream!,就是能成為一位汽車工程師,一直幻想著開著自己設(shè)計的汽車飛奔在公路上,迷倒了萬千少女??瓤葉~雖然現(xiàn)在沒實現(xiàn)我的dream,但夢想還是得有的。 說到...

    elisa.yang 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<