成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

常用設(shè)計模式——工廠模式

linkin / 2392人閱讀

摘要:客戶端抽象工廠模式概念抽象工廠模式是所有形態(tài)的工廠模式中最為抽象和最具一般性的一種形態(tài)。為了方便引進(jìn)抽象工廠模式,引進(jìn)一個新概念產(chǎn)品族。具體產(chǎn)品角色抽象工廠模式所創(chuàng)建的任何產(chǎn)品對象都是某一個具體產(chǎn)品類的實(shí)例。

簡單工廠模式

1、概念:簡單工廠模式其實(shí)不是一個設(shè)計模式,反而比較像一種編程習(xí)慣。主要我們定義一個非常簡單的類主要負(fù)責(zé)幫我們生產(chǎn)不同的產(chǎn)品。類圖如下:

客戶端通過簡單工廠可以生產(chǎn)出具體產(chǎn)品A,具體產(chǎn)品B,具體產(chǎn)品C。

2、實(shí)例:

簡單工廠:

package my.oschina.net.design.factory;

public class SimplePizzaFactory {

    /**
     * 根據(jù)傳入的type參數(shù),返回相應(yīng)的pizza
     * @param type
     * @return
     */
    public Pizza createPizza(String type) {  //一般這個方法為static
        Pizza pizza = null;

        if (type.equals("cheese")) {
            pizza = new CheesePizza();
        } else if (type.equals("pepperoni")) {
            pizza = new PepperoniPizza();
        } else if (type.equals("clam")) {
            pizza = new ClamPizza();
        } else if (type.equals("veggie")) {
            pizza = new VeggiePizza();
        }
        return pizza;
    }
}

客戶端,想要建立一個pizza store,這個pizza store里有一個簡單工廠,當(dāng)我們需要什么pizza的時候,告訴簡單工廠,它會為我們生產(chǎn)。

package my.oschina.net.design.factory;

public class PizzaStore {
    //通過組合的使用,加上一個簡單工廠SimplePizzaFactory的引用,用于創(chuàng)建pizza
    SimplePizzaFactory factory;
 
    public PizzaStore(SimplePizzaFactory factory) { 
        this.factory = factory;
    }
 
    public Pizza orderPizza(String type) {
        Pizza pizza;
        //調(diào)用簡單工廠SimplePizzaFactory的createPizza(type)方法創(chuàng)建pizza
        pizza = factory.createPizza(type);
 
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();

        return pizza;
    }
}
工廠方法模式

1、概念:這個和簡單工廠有區(qū)別,簡單工廠模式只有一個工廠,工廠方法模式對每一個產(chǎn)品都有相應(yīng)的工廠。

構(gòu)建一個工廠的時候,實(shí)際上是構(gòu)建一個具體的子類對象,讓子類決定去生產(chǎn)什么產(chǎn)品。

2、實(shí)例:
構(gòu)建兩個工廠,一個芝加哥pizza工廠,一個紐約pizza工廠。去生產(chǎn)芝加哥風(fēng)味的pizza以及紐約風(fēng)味的pizza。

package my.oschina.net.design.factory;

public class ChicagoPizzaStore extends PizzaStore {

    Pizza createPizza(String item) {
            if (item.equals("cheese")) {
                    return new ChicagoStyleCheesePizza();
            } else if (item.equals("veggie")) {
                    return new ChicagoStyleVeggiePizza();
            } else if (item.equals("clam")) {
                    return new ChicagoStyleClamPizza();
            } else if (item.equals("pepperoni")) {
                    return new ChicagoStylePepperoniPizza();
            } else return null;
    }
}


package my.oschina.net.design.factory;

public class NYPizzaStore extends PizzaStore {

    Pizza createPizza(String item) {
        if (item.equals("cheese")) {
            return new NYStyleCheesePizza();
        } else if (item.equals("veggie")) {
            return new NYStyleVeggiePizza();
        } else if (item.equals("clam")) {
            return new NYStyleClamPizza();
        } else if (item.equals("pepperoni")) {
            return new NYStylePepperoniPizza();
        } else return null;
    }
}

客戶端:

package my.oschina.net.design.factory;

public class PizzaTestDrive {
 
    public static void main(String[] args) {
        PizzaStore nyStore = new NYPizzaStore();
        PizzaStore chicagoStore = new ChicagoPizzaStore();
 
        Pizza pizza = nyStore.orderPizza("cheese");
        System.out.println("Ethan ordered a " + pizza.getName() + "
");
 
        pizza = chicagoStore.orderPizza("cheese");
        System.out.println("Joel ordered a " + pizza.getName() + "
");

        pizza = nyStore.orderPizza("clam");
        System.out.println("Ethan ordered a " + pizza.getName() + "
");
 
        pizza = chicagoStore.orderPizza("clam");
        System.out.println("Joel ordered a " + pizza.getName() + "
");
    }
}
抽象工廠模式:

1、概念:抽象工廠模式是所有形態(tài)的工廠模式中最為抽象和最具一般性的一種形態(tài)。為了方便引進(jìn)抽象工廠模式,引進(jìn)一個新概念:產(chǎn)品族(Product Family)。所謂產(chǎn)品族,是指位于不同產(chǎn)品等級結(jié)構(gòu),功能相關(guān)聯(lián)的產(chǎn)品組成的家族。如圖:

圖中一共有四個產(chǎn)品族,分布于三個不同的產(chǎn)品等級結(jié)構(gòu)中。只要指明一個產(chǎn)品所處的產(chǎn)品族以及它所屬的等級結(jié)構(gòu),就可以唯一的確定這個產(chǎn)品。

引進(jìn)抽象工廠模式
所謂的抽象工廠是指一個工廠等級結(jié)構(gòu)可以創(chuàng)建出分屬于不同產(chǎn)品等級結(jié)構(gòu)的一個產(chǎn)品族中的所有對象。如果用圖來描述的話,如下圖:

2、抽象工廠模式的結(jié)構(gòu):

圖中描述的東西用產(chǎn)品族描述如下:

抽象工廠(Abstract Factory)角色:擔(dān)任這個角色的是工廠方法模式的核心,它是與應(yīng)用系統(tǒng)商業(yè)邏輯無關(guān)的。

具體工廠(Concrete Factory)角色:這個角色直接在客戶端的調(diào)用下創(chuàng)建產(chǎn)品的實(shí)例。這個角色含有選擇合適的產(chǎn)品對象的邏輯,而這個邏輯是與應(yīng)用系統(tǒng)的商業(yè)邏輯緊密相關(guān)的。

抽象產(chǎn)品(Abstract Product)角色:擔(dān)任這個角色的類是工廠方法模式所創(chuàng)建的對象的父類,或它們共同擁有的接口。

具體產(chǎn)品(Concrete Product)角色:抽象工廠模式所創(chuàng)建的任何產(chǎn)品對象都是某一個具體產(chǎn)品類的實(shí)例。這是客戶端最終需要的東西,其內(nèi)部一定充滿了應(yīng)用系統(tǒng)的商業(yè)邏輯。

參考:https://blog.csdn.net/ipqxian...

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69092.html

相關(guān)文章

  • js常用設(shè)計模式實(shí)現(xiàn)(二)工廠模式和抽象工廠模式

    摘要:抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產(chǎn)品的具體的情況下,創(chuàng)建多個產(chǎn)品族中的產(chǎn)品對象。前邊的兩個都是直接生產(chǎn)實(shí)例的,開始以為抽象工廠也是但是后來發(fā)現(xiàn)抽象工廠更像是生產(chǎn)工廠,其實(shí)抽象工廠其實(shí)是實(shí)現(xiàn)子類繼承父類的方法。 創(chuàng)建型模式 創(chuàng)建型模式是對一個類的實(shí)例化過程進(jìn)行了抽象,把對象的創(chuàng)建和對象的使用進(jìn)行了分離 上一篇介紹了下單例模式,這一篇介紹一下工廠模式和抽象工廠模式,...

    meteor199 評論0 收藏0
  • spring源碼中工廠模式總結(jié)

    摘要:簡單工廠模式的實(shí)質(zhì)是由一個工廠類根據(jù)傳入的參數(shù),動態(tài)決定應(yīng)該創(chuàng)建哪一個產(chǎn)品類。中的就是簡單工廠模式的體現(xiàn),根據(jù)傳入一個唯一的標(biāo)識來獲得對象,但是否是在傳入?yún)?shù)后創(chuàng)建還是傳入?yún)?shù)前創(chuàng)建這個要根據(jù)具體情況來定。 Spring中常用的設(shè)計模式 常用的設(shè)計模式(23種)如下 創(chuàng)建型: 工廠方法模式Factory Method,抽象工廠模式Abstract Factory 建造者...

    cgh1999520 評論0 收藏0
  • JavaScript常用設(shè)計模式

    摘要:原文鏈接常用設(shè)計模式設(shè)計模式設(shè)計模式是一種在長時間的經(jīng)驗(yàn)與錯誤中總結(jié)出來可服用的解決方案。用來模擬接口的相關(guān)操作我很帥通過適配器函數(shù)來調(diào)用目的我很帥學(xué)習(xí)資料聽飛狐聊設(shè)計模式系列設(shè)計模式湯姆大叔 原文鏈接: JavaScript常用設(shè)計模式 設(shè)計模式 設(shè)計模式是一種在長時間的經(jīng)驗(yàn)與錯誤中總結(jié)出來可服用的解決方案。 設(shè)計模式主要分為3類: 創(chuàng)建型設(shè)計模式:專注于處理對象的創(chuàng)建 Const...

    RyanHoo 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<