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

資訊專欄INFORMATION COLUMN

設(shè)計(jì)模式之抽象工廠

VincentFF / 2558人閱讀

摘要:類圖上面的這張圖引用設(shè)計(jì)模式之禪關(guān)于抽象工廠的通用類圖,說實(shí)話,我覺得這張圖很難懂,不容易表述抽象工廠模式也或許是個(gè)人理解能力。

前言

關(guān)于抽象工廠模式,博主初學(xué)的時(shí)候是懵逼的,花了好大力氣才明白它與工廠模式的異同,不得不說理解能力還有待加強(qiáng)(~。~)

什么是抽象工廠模式
為創(chuàng)建一組相關(guān)或相互依賴的對(duì)象提供一個(gè)接口,而且無(wú)須指定它們的具體類。

讓我們?cè)倩仡櫹鹿S模式的定義:

定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類。工廠方法使一個(gè)類的實(shí)例化延遲到子類。

從定義上看,區(qū)別在于抽象工廠是針對(duì)一組相關(guān)或依賴的對(duì)象(產(chǎn)品和產(chǎn)品之間有共同的約束),而工廠模式是針對(duì)一種產(chǎn)品。

UML類圖

上面的這張圖引用設(shè)計(jì)模式之禪關(guān)于抽象工廠的通用類圖,說實(shí)話,我覺得這張圖很難懂,不容易表述抽象工廠模式(也或許是個(gè)人理解能力)。下面上我的例子:

抽象工廠模式是工廠方法模式的升級(jí)版本,在有多個(gè)業(yè)務(wù)品種、業(yè)務(wù)分類時(shí),通過抽象工廠模式產(chǎn)生需要的對(duì)象是一種非常好的解決方式。要想理解抽象工廠模式,有兩個(gè)概念我們是必須要理解的。

產(chǎn)品族:功能相關(guān)聯(lián)的一組產(chǎn)品,一般位于不同產(chǎn)品等級(jí)結(jié)構(gòu)的相同位置上,每一個(gè)產(chǎn)品族中的產(chǎn)品數(shù)應(yīng)該與產(chǎn)品等級(jí)結(jié)構(gòu)數(shù)一致。在上面的例子中:ComputerCpu和ComputerRam屬于一個(gè)產(chǎn)品族,MobileRam和MobileCpu屬于一個(gè)產(chǎn)品族.

產(chǎn)品等級(jí)結(jié)構(gòu): 一種產(chǎn)品內(nèi)部的不同等級(jí)。比如cpu下的computerCpu和MobileCpu,Ram下的computerRam和mobileRam.

看懂了嗎?沒看懂就再看一遍啊.....如果不理解這兩個(gè)概念,就不會(huì)理解抽象工廠,所以務(wù)必看懂再看接下來的文章.(想要更仔細(xì)的了解這兩個(gè)概念,可以觀看鏈接描述)

使用場(chǎng)景

一組對(duì)象有相同的約束,就可以使用抽象工廠模式。就比如我們常用的qq音樂,有mac版的,有windows版的,他們共同的約束就是操作系統(tǒng)。相應(yīng)的在這個(gè)也無(wú)力,產(chǎn)品族有兩個(gè),mac版qq音樂和windows版qq音樂。產(chǎn)品等級(jí)結(jié)構(gòu)只有一個(gè)就是qq音樂了。

代碼分析

按照上面的cpu和ram

public abstract class Cpu {

    public void introduce() {
        System.out.println("我是" + getOperationSystem() + "處理器,運(yùn)算速度賊快");
    }

    abstract String getOperationSystem();
}
public class ComputerCpu extends Cpu {
    @Override
    String getOperationSystem() {
        return "pc";
    }
}
public class MobileCpu extends Cpu {
    @Override
    String getOperationSystem() {
        return "移動(dòng)端";
    }
}
public abstract class Ram {
    public void introduce(){
        System.out.println("我是"+getOperationSystem()+"內(nèi)存,存取速度賊快");
    }

    abstract String getOperationSystem();
}
public class ComputerRam extends Ram {
    @Override
    String getOperationSystem() {
        return "pc";
    }
}
public class MobileRam extends Ram {
    @Override
    String getOperationSystem() {
        return "移動(dòng)端";
    }
}
public abstract class AbstractFactory {

    abstract Cpu createCpu();
    abstract Ram createRam();
}
public class ComputerFactory extends AbstractFactory {
    @Override
    Cpu createCpu() {
        return new ComputerCpu();
    }

    @Override
    Ram createRam() {
        return new ComputerRam();
    }
}
public class MobileFactory extends AbstractFactory {
    @Override
    Cpu createCpu() {
        return new MobileCpu();
    }

    @Override
    Ram createRam() {
        return new MobileRam();
    }
}
public class Client {

    public static void main(String[] args) {
        AbstractFactory computerFactory = new ComputerFactory();
        AbstractFactory mobileFactory = new MobileFactory();

        computerFactory.createCpu().introduce();
        computerFactory.createRam().introduce();

        mobileFactory.createCpu().introduce();
        mobileFactory.createRam().introduce();
    }
}
測(cè)試結(jié)果:
我是pc處理器,運(yùn)算速度賊快
我是pc內(nèi)存,存取速度賊快
我是移動(dòng)端處理器,運(yùn)算速度賊快
我是移動(dòng)端內(nèi)存,存取速度賊快

相信只要前面的理論懂了,上面的這個(gè)小例子簡(jiǎn)直不要太輕松。

抽象廠模式具有封裝性,高層模塊在調(diào)用時(shí)根本不需要關(guān)心具體實(shí)現(xiàn)類,只要知道接口(抽象類)就可以了,我們不需要關(guān)心對(duì)象的創(chuàng)建問題,將創(chuàng)建對(duì)象的問題統(tǒng)統(tǒng)拋給工廠,只需知道一個(gè)工廠,就可以創(chuàng)造這個(gè)產(chǎn)品組的所有產(chǎn)品,優(yōu)秀的設(shè)計(jì)就該如此。

產(chǎn)品族內(nèi)的約束非公開狀態(tài),比如我使用手機(jī),用的cpu和ram肯定都是移動(dòng)端的,你總不可能手機(jī)用pc的cpu或者ram吧,本來就是不配套的配置。但是我們不需要去關(guān)心這個(gè),因?yàn)樗麄兊募s束都在工廠內(nèi)實(shí)現(xiàn)

總結(jié)

抽象工廠模式主要是解決一組具有相同約束的對(duì)象的創(chuàng)建問題。其中最核心的概念就是產(chǎn)品族和產(chǎn)品等級(jí)結(jié)構(gòu),抽象工廠模式在擴(kuò)展產(chǎn)品等級(jí)結(jié)構(gòu)是非常容易的,只需要增加新的產(chǎn)品類和新的工廠類就可以,從這點(diǎn)看它是符合開閉原則的,若是想擴(kuò)展產(chǎn)品族,也就是增加一種產(chǎn)品,就需要?jiǎng)?chuàng)建對(duì)應(yīng)類,同時(shí)需要修改所有的工廠,是不符合開閉原則的。

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

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

相關(guān)文章

  • 一天一個(gè)設(shè)計(jì)模式JS實(shí)現(xiàn)——工廠模式

    摘要:參考文章深入理解三種工廠模式工廠模式,工廠方法模式,抽象工廠模式詳解工廠模式是中最常用的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。 參考文章:深入理解java三種工廠模式工廠模式,工廠方法模式,抽象工廠模式 詳解 工廠模式(Factory Pattern)是 Java 中最常用的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的...

    Muninn 評(píng)論0 收藏0
  • 優(yōu)才公開課筆記:php設(shè)計(jì)模式 (二)工廠模式

    摘要:但本質(zhì)是,簡(jiǎn)單工廠并未嚴(yán)格遵循設(shè)計(jì)模式的開閉原則,當(dāng)需要增加新產(chǎn)品時(shí)也需要修改工廠代碼。但是工廠方法則嚴(yán)格遵守開閉原則,模式只負(fù)責(zé)抽象工廠接口,具體工廠交給客戶去擴(kuò)展。 最近開展了三次設(shè)計(jì)模式的公開課,現(xiàn)在來總結(jié)一下設(shè)計(jì)模式在PHP中的應(yīng)用,這是第二篇?jiǎng)?chuàng)建型模式之工廠模式。 設(shè)計(jì)模式的一般介紹在第一篇文章講了,這里就不重復(fù)。 工廠模式 實(shí)現(xiàn):定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)...

    aisuhua 評(píng)論0 收藏0
  • 設(shè)計(jì)模式抽象工廠模式

    摘要:所謂的產(chǎn)品族,一般或多或少的都存在一定的關(guān)聯(lián),抽象工廠模式就可以在類內(nèi)部對(duì)產(chǎn)品族的關(guān)聯(lián)關(guān)系進(jìn)行定義和描述,而不必專門引入一個(gè)新的類來進(jìn)行管理。 0x01.定義與類型 定義:抽象工廠模式提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口 無(wú)需指定它們具體的類 類型:創(chuàng)建型 UML showImg(https://segmentfault.com/img/bVbtBp1?w=800&h=862...

    Acceml 評(píng)論0 收藏0
  • 工廠模式(一)抽象工廠模式

    摘要:主要詳解簡(jiǎn)單工廠模式到抽象工廠模式的演變。抽象工廠模式當(dāng)一個(gè)類別的產(chǎn)品還有多個(gè)系列區(qū)分時(shí),為了按系列生產(chǎn)商品,使用抽象工廠區(qū)分。 主要詳解簡(jiǎn)單工廠模式到抽象工廠模式的演變。 簡(jiǎn)單工廠模式 即靜態(tài)工廠模式1.將對(duì)象的創(chuàng)建和使用分開;2.將生產(chǎn)過程集中,便于集中管理;3.當(dāng)需要?jiǎng)?chuàng)建的對(duì)象類有變動(dòng)時(shí),就不用在所有new 的地方修改了,直接修改工廠類即可; /** * 簡(jiǎn)單工廠模式 ---...

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

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

0條評(píng)論

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