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

資訊專欄INFORMATION COLUMN

Java 設(shè)計(jì)模式 簡單工廠 工廠模式 抽象工廠

CocoaChina / 2058人閱讀

摘要:簡單工廠,工廠模式和抽象工廠。不要認(rèn)為簡單工廠是用就覺得一無是處,也不要覺得抽象工廠比較高大上就到處套。

工廠模式,實(shí)際上也會根據(jù)業(yè)務(wù)情景不同會有不同的實(shí)現(xiàn)方式。一般分為3種。簡單工廠,工廠模式和抽象工廠。顧名思義,這三種從簡單到抽象,名稱越來越高大上,實(shí)現(xiàn)方式肯定是越來越復(fù)雜

結(jié)論1:三種工廠的實(shí)現(xiàn)越來越復(fù)雜

簡單工廠
public class Factory
{
    // 定義產(chǎn)品編號
    public int prodNo;

    // 構(gòu)造工廠時告知工廠產(chǎn)品標(biāo)識
    public Factory(int prodNo)
    {
        this.prodNo = prodNo;
    }

    public IProduct GetProduct()
    {
        // 根據(jù)產(chǎn)品標(biāo)識生產(chǎn)產(chǎn)品
        switch (prodNo) 
        {
            case prodNo1:
                return new ProductA();
                break;
            case prodNo2:
                return new ProductB();
                break;
            default:
                ...
        }
}
}


// 產(chǎn)品A
class ProductA implements IProduct
{
    //產(chǎn)品屬性
    //......
}

//產(chǎn)品B
class ProductB implements IProduct
{
    //產(chǎn)品屬性
    //......
}

//產(chǎn)品接口
public interface IProduct
{
    //產(chǎn)品方法
    //......
}

簡單工廠的問題就在于swich case(或者if else)。每當(dāng)新增一種產(chǎn)品時,你都需要去維護(hù)工廠中的判斷語句,造成該工廠類不斷增長,各種判斷擠在一起,給擴(kuò)展和維護(hù)帶來麻煩。產(chǎn)品和工廠沒有實(shí)現(xiàn)完全解耦,綁定在一起

結(jié)論2:簡單工廠通過構(gòu)造時傳入的標(biāo)識來生產(chǎn)產(chǎn)品,不同產(chǎn)品都在同一個工廠中生產(chǎn),這種判斷會隨著產(chǎn)品的增加而增加,給擴(kuò)展和維護(hù)帶來麻煩

工廠模式
// 工廠接口
interface IFactory 
{
    IProduct GetProduct();
}

// A工廠類
class FactoryA implements IFactory
{
    IProduct productA;
    public FactoryA()
    {
        this.productA = new ProductA();
    }

    public IProduct GetProduct() //A工廠生產(chǎn)A產(chǎn)品
    {
        return this.productA;
    }
}

//B工廠類
class FactoryB implements IFactory
{
    IProduct productB;
    public FactoryB()
    {
        this.productB = new ProductB();
    }

    public IProduct GetProduct() //B工廠生產(chǎn)B產(chǎn)品
    {
        return this.productB;
    }
}

//產(chǎn)品接口
interface IProduct
{
    //產(chǎn)品方法
    //......
}

//產(chǎn)品A
class ProductA implements IProduct
{
    //產(chǎn)品屬性
    //......
}

//產(chǎn)品B
class ProductB implements IProduct
{
    //產(chǎn)品屬性
    //......
}

在工廠模式中,已經(jīng)將工廠類分開,不再將所有產(chǎn)品在同一工廠中生產(chǎn),解決了簡單工廠中不斷增加的switch case的問題。如再新增一個C產(chǎn)品,那么只需寫一個C工廠和C產(chǎn)品,在調(diào)用時用C工廠生產(chǎn)C產(chǎn)品即可,A和B工廠和產(chǎn)品完全不受影響

結(jié)論3:工廠模式無法解決產(chǎn)品族和產(chǎn)品等級結(jié)構(gòu)的問題

抽象工廠

實(shí)現(xiàn)不同的產(chǎn)品族,并且實(shí)現(xiàn)產(chǎn)品等級結(jié)構(gòu)

// 工廠接口,即抽象工廠
interface IFactory
{
    IFridge CreateFridge();
    IAirCondition CreateAirCondition();
}

// 三星的工廠,生產(chǎn)三星的產(chǎn)品族
class SamsungFactory implements IFactory
{
    public IAirCondition CreateAirCondition()
    {
        // 三星的工廠生產(chǎn)三星的空調(diào)
        return new SamsungAirCondition(); 
    }
    public IFridge CreateFridge()
    {
        // 三星的工廠生產(chǎn)三星的冰箱
        return new SamsungFridge(); 
    }
}

// 格力的工廠,生產(chǎn)格力的產(chǎn)品族
class GreeFactry implements IFactory
{
    public IAirCondition CreateAirCondition()
    {
        // 格力的工廠生產(chǎn)格力的空調(diào)
        return new GreeAirCondition(); 
    }
    public IFridge CreateFridge()
    {
        // 格力的工廠生產(chǎn)格力的冰箱
        return new GreeFridge(); 
    }
}

// 冰箱產(chǎn)品接口
interface IFridge
{
    // 冰箱產(chǎn)品接口
    // 冰箱的action
}

// 空調(diào)接口
interface IAirCondition
{
    // 空調(diào)產(chǎn)品接口
    // 空調(diào)的action
}

// 三星的冰箱
public class SamsungFridge implements IFridge
{
    // 三星冰箱的action和property
}

// 格力的冰箱
public class GreeFridge : IFridge
{
    // 格力冰箱的action和property
}

// 三星的空調(diào)
public class SamsungAirCondition implements IAirCondition
{
    // 三星空調(diào)的action和property
}

// 格力的空調(diào)
public class GreeAirCondition implements IAirCondition
{
    / /格力空調(diào)的action和property
}

在工廠模式中,一個工廠生產(chǎn)一個產(chǎn)品,所有的具體產(chǎn)品是由同一個抽象產(chǎn)品派生的,不存在產(chǎn)品等級結(jié)構(gòu)和產(chǎn)品族的概念;而在抽象工廠中,同一個等級的產(chǎn)品是派生于一個抽象產(chǎn)品(即產(chǎn)品接口),一個抽象工廠派生不同的具體工廠,每個具體工廠生產(chǎn)自己的產(chǎn)品族(包含不同產(chǎn)品等級)

結(jié)論4:工廠模式中,一個工廠生產(chǎn)一個產(chǎn)品,所有產(chǎn)品派生于同一個抽象產(chǎn)品(或產(chǎn)品接口);而抽象工廠模式中,一個工廠生產(chǎn)多個產(chǎn)品,它們是一個產(chǎn)品族,不同的產(chǎn)品族的產(chǎn)品派生于不同的抽象產(chǎn)品(或產(chǎn)品接口)

三種工廠模式關(guān)鍵點(diǎn)

三種工廠的實(shí)現(xiàn)是越來越復(fù)雜的

簡單工廠通過構(gòu)造時傳入的標(biāo)識來生產(chǎn)產(chǎn)品,不同產(chǎn)品都在同一個工廠中生產(chǎn),這種判斷會隨著產(chǎn)品的增加而增加,給擴(kuò)展和維護(hù)帶來麻煩

工廠模式無法解決產(chǎn)品族和產(chǎn)品等級結(jié)構(gòu)的問題

抽象工廠模式中,一個工廠生產(chǎn)多個產(chǎn)品,它們是一個產(chǎn)品族,不同的產(chǎn)品族的產(chǎn)品派生于不同的抽象產(chǎn)品(或產(chǎn)品接口)

工廠模式問答

在上面的代碼中,都使用了接口來表達(dá)抽象工廠或者抽象產(chǎn)品,那么可以用抽象類嗎?有何區(qū)別?

從功能上說,完全可以,甚至可以用接口來定義行為,用抽象類來抽象屬性。抽象類更加偏向于屬性的抽象,而用接口更加偏向行為的規(guī)范與統(tǒng)一。使用接口有更好的可擴(kuò)展性和可維護(hù)性,更加靈活實(shí)現(xiàn)松散耦合,所以編程原則中有一條是針對接口編程而不是針對類編程

到底何時應(yīng)該用工廠模式

根據(jù)具體業(yè)務(wù)需求。不要認(rèn)為簡單工廠是用switch case就覺得一無是處,也不要覺得抽象工廠比較高大上就到處套。我們使用設(shè)計(jì)模式是為了解決問題而不是炫技,所以根據(jù)三種工廠模式的特質(zhì),以及對未來擴(kuò)展的預(yù)期,來確定使用哪種工廠模式

說說你在項(xiàng)目中工廠模式的應(yīng)用

一個旅游產(chǎn)品的B2B網(wǎng)站,根據(jù)不同類型的業(yè)務(wù)形態(tài),產(chǎn)品也是不同的,有國內(nèi)跟團(tuán),出境跟團(tuán),國內(nèi)自由行,出境自由行,郵輪五種產(chǎn)品,并且后面可能還會有門票,酒店,機(jī)票等等產(chǎn)品,其中有些聯(lián)系也有些區(qū)別

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

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

相關(guān)文章

  • Java 設(shè)計(jì)模式工廠模式

    摘要:與以往的使用的方式不同,工廠模式使用工廠實(shí)例化對象。抽象工廠模式亮相抽象工廠模式抽象工廠模式提供一個接口,用于創(chuàng)建相關(guān)或依賴對象的家族,而不需要明確指定具體類。 寫在前面 這篇博文介紹設(shè)計(jì)模式的形式將與其他篇博文不太一樣,這里我們將從一個問題入手,逐步了解到簡單工廠、工廠方法與抽象工廠模式。 PS:這篇博文涉及的內(nèi)容較多,所以篇幅有點(diǎn)長,請耐心閱讀。 為什么要使用工廠模式? 在 OO ...

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

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

    蘇丹 評論0 收藏0
  • Java設(shè)計(jì)模式-工廠模式

    摘要:一簡單工廠定義簡單工廠其實(shí)并不屬于種設(shè)計(jì)模式之一,該模式是工廠方法模式的弱化或者說是工廠方法模式的一種特例,因?yàn)楹唵?,所以稱為簡單工廠模式,也叫做靜態(tài)工廠模式。 一、簡單工廠 定義 簡單工廠其實(shí)并不屬于23種GOF設(shè)計(jì)模式之一,該模式是工廠方法模式的弱化(或者說是工廠方法模式的一種特例),因?yàn)楹唵?,所以稱為簡單工廠模式(Simple Factory Pattern),也叫做靜態(tài)工廠模式...

    Songlcy 評論0 收藏0
  • 設(shè)計(jì)模式》2.創(chuàng)建型模式

    摘要:又稱為多態(tài)性工廠模式或虛擬構(gòu)造子模式。簡單工廠模式簡單工廠模式簡單工廠模式又稱為靜態(tài)工廠方法模式,它屬于類創(chuàng)建型模式。多態(tài)性設(shè)計(jì)工廠方法模式之所以又被稱為多態(tài)工廠模式,是因?yàn)樗械木唧w工廠類都具有同一抽象父類。 點(diǎn)擊進(jìn)入我的博客 2.1 簡單工廠模式 2.1.1 工廠模式的幾種形態(tài) 工廠模式主要用一下幾種形態(tài): 簡單工廠(Simple Factory):專門定義一個類來負(fù)責(zé)創(chuàng)建其他...

    Nekron 評論0 收藏0

發(fā)表評論

0條評論

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