亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

CocoaChina / 2137人閱讀

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

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

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

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

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

    public IProduct GetProduct()
    {
        // 根據(jù)產(chǎn)品標(biāo)識(shí)生產(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)品方法
    //......
}

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

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

工廠模式
// 工廠接口
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)將工廠類分開(kāi),不再將所有產(chǎn)品在同一工廠中生產(chǎn),解決了簡(jiǎn)單工廠中不斷增加的switch case的問(wèn)題。如再新增一個(gè)C產(chǎn)品,那么只需寫一個(gè)C工廠和C產(chǎn)品,在調(diào)用時(shí)用C工廠生產(chǎn)C產(chǎn)品即可,A和B工廠和產(chǎn)品完全不受影響

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

抽象工廠

實(shí)現(xiàn)不同的產(chǎn)品族,并且實(shí)現(xiàn)產(chǎn)品等級(jí)結(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
}

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

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

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

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

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

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

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

工廠模式問(wèn)答

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

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

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

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/66493.html

相關(guān)文章

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

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

    Jochen 評(píng)論0 收藏0
  • 工廠模式理解了沒(méi)有?

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

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

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

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

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

    Nekron 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<