国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

設(shè)計(jì)模式學(xué)習(xí)筆記:工廠模式

luxixing / 1968人閱讀

摘要:二簡(jiǎn)單工廠模式組成工廠類工廠模式的核心,通過(guò)調(diào)用它來(lái)實(shí)現(xiàn)其他類的功能。三工廠方法模式利用工廠方法模式可以有效解決簡(jiǎn)單工廠模式破壞開(kāi)閉原則的問(wèn)題。

一、概念

1、工廠模式分為三類:
(1)簡(jiǎn)單工廠模式:一個(gè)工廠創(chuàng)建所有產(chǎn)品
(2)工廠方法模式:一個(gè)工廠方法創(chuàng)建一個(gè)產(chǎn)品
(3)抽象工廠模式:一個(gè)工廠方法創(chuàng)建一類產(chǎn)品

2、創(chuàng)建型模式
這種模式是指將實(shí)例的創(chuàng)建和使用分離開(kāi)來(lái),隱藏類實(shí)例的創(chuàng)建細(xì)節(jié),外界對(duì)于對(duì)象只需要知道它們共同的接口即可。

二、簡(jiǎn)單工廠模式

1、組成
(1)工廠類:工廠模式的核心,通過(guò)調(diào)用它來(lái)實(shí)現(xiàn)其他類的功能。
(2)抽象產(chǎn)品角色
(3)具體產(chǎn)品角色:繼承抽象工廠角色,工廠類就是創(chuàng)建此角色的實(shí)例。

2、舉例
想要說(shuō)明這個(gè)模式,我們可以看一個(gè)簡(jiǎn)單的例子
(1)首先創(chuàng)建一個(gè)Operation抽象類,作為抽象產(chǎn)品角色

public abstract class Operation {
    private int operator1;
    private int operator2;

    public int getOperator1() {
        return operator1;
    }

    public int getOperator2() {
        return operator2;
    }

    public void setOperator1(int operator1) {
        this.operator1 = operator1;
    }

    public void setOperator2(int operator2) {
        this.operator2 = operator2;
    }

    protected abstract int getResult();
}

(2)如果我們想要實(shí)現(xiàn)加減法運(yùn)算,可以寫一個(gè)類繼承Operation類,并且重寫getResult方法。

public class OperationAdd extends Operation {
    @Override
    public int getResult(){
        return getOperator1() + getOperator2();
    }
}

public class OperationMinus extends Operation {
    @Override
    public int getResult(){
        return getOperator1() - getOperator2();
    }
}

(3)如果我們要進(jìn)行加減法運(yùn)算,可以直接調(diào)用這兩個(gè)類創(chuàng)建出的實(shí)例的方法,但是簡(jiǎn)單工廠模式希望我們能夠另外建立一個(gè)工廠,并且用這個(gè)工廠來(lái)創(chuàng)建加減法類的實(shí)例。因?yàn)檫@樣我們就不需要知道具體類的名字,只需要傳入加減法的符號(hào)即可。

public class Factory {
    public static Operation createOperation(String operator){
        Operation op = null;
        switch (operator){
            case "+":
                op = new OperationAdd();
                break;
            case "-":
                op = new OperationMinus();
                break;
        }
        return op;
    }
}

(4)這樣我們的main函數(shù)就可以寫成這樣子。

public static void main(String []args){
        Operation add = Factory.createOperation("+");
        add.setOperator1(100);
        add.setOperator2(60);
        System.out.println(add.getResult());
    }

3、存在的問(wèn)題
我們可以考慮一下這種方式存在的問(wèn)題,使用簡(jiǎn)單工廠模式,可以不用知道具體類的名字,直接交給工廠來(lái)創(chuàng)建。

但是這樣一來(lái),如果我們想要增加新的運(yùn)算,即給工廠增加新的產(chǎn)品,首先寫新類,還要更改工廠類,增加新的switch判斷邏輯,也就不符合開(kāi)閉原則(對(duì)修改關(guān)閉,對(duì)擴(kuò)展開(kāi)放)。

三、工廠方法模式
利用工廠方法模式可以有效解決簡(jiǎn)單工廠模式破壞開(kāi)閉原則的問(wèn)題。
工廠方法模式在簡(jiǎn)單工廠模式基礎(chǔ)上的主要變化在于,增加了一個(gè)抽象工廠接口,讓每個(gè)具體工廠類去實(shí)現(xiàn)抽象工廠接口,這樣用戶就不用關(guān)心具體工廠類創(chuàng)建的細(xì)節(jié)。

1、舉例
還是對(duì)于運(yùn)算器這個(gè)例子,我們根據(jù)工廠模式進(jìn)行修改。

(1)創(chuàng)建抽象工廠接口

public interface TemplateFactory {
    Operation CreateOperation();
}

(2)創(chuàng)建加法工廠,實(shí)現(xiàn)抽象工廠接口

public class AddFactory implements TemplateFactory{
    public Operation CreateOperation(){
        return new OperationAdd();
    }
}

public class MinusFactory implements TemplateFactory{
    public Operation CreateOperation(){
        return new OperationMinus();
    }
}

(3)main函數(shù)

    public static void main(String []args){
        TemplateFactory factory = new AddFactory();
        Operation add = factory.CreateOperation();
        add.setOperator1(100);
        add.setOperator2(60);
        System.out.println(add.getResult());
    }
    

使用工廠方法模式,能夠?qū)崿F(xiàn)高度解耦,需要增加新的產(chǎn)品時(shí),只需要增加相關(guān)的類和工廠即可,不需要改動(dòng)已有的產(chǎn)品和工廠。

2、存在的問(wèn)題
使用工廠方法模式的主要問(wèn)題在于,每次增加一個(gè)產(chǎn)品,都需要新增至少兩個(gè)類,這會(huì)增加系統(tǒng)的復(fù)雜性。

四、抽象工廠模式

抽象工廠模式中提到一個(gè)產(chǎn)品族的概念,根據(jù)前面兩個(gè)工廠模式,簡(jiǎn)單工廠是一個(gè)工廠“生產(chǎn)”所有產(chǎn)品,工廠方法是一個(gè)工廠生產(chǎn)一個(gè)產(chǎn)品。
抽象工廠就是一個(gè)工廠生產(chǎn)一個(gè)產(chǎn)品族,產(chǎn)品族這個(gè)概念,是指位于不同產(chǎn)品等級(jí)結(jié)構(gòu)中,功能相關(guān)的產(chǎn)品組成的家族。

1、舉例
比如我們現(xiàn)在兩個(gè)產(chǎn)品族,HUAWEI手機(jī)族和XIAOMI手機(jī)族,兩個(gè)族中又分別包含商務(wù)機(jī)和時(shí)尚機(jī)這兩種不同產(chǎn)品等級(jí)的手機(jī)類型,那么我們需要建立兩個(gè)工廠:HUAWEI工廠和XIAOMI工廠,每個(gè)工廠里又分別提供生產(chǎn)商務(wù)機(jī)和時(shí)尚機(jī)。這里就不通過(guò)代碼來(lái)說(shuō)明了。

五、總結(jié)

工廠模式的主要目的,就是為了將實(shí)例對(duì)象的創(chuàng)建和使用分開(kāi),所以工廠干的事情,就是實(shí)例化對(duì)象。
而三種方式的聯(lián)系可以通過(guò)這張圖來(lái)幫助理解。
http://www.hollischuang.com/w...

參考:
http://www.hollischuang.com/w...
你以為工廠模式很簡(jiǎn)單,可能是因?yàn)槟愣闹皇潜降囊唤?/p>

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/75320.html

相關(guān)文章

  • (CZ深入淺出Java基礎(chǔ))設(shè)計(jì)模式筆記

    摘要:在設(shè)計(jì)模式中,所有的設(shè)計(jì)模式都遵循這一原則。其實(shí)就是說(shuō)在應(yīng)用程序中,所有的類如果使用或依賴于其他的類,則應(yīng)該依賴這些其他類的抽象類,而不是這些其他類的具體類。使用設(shè)計(jì)模式是為了可重用代碼讓代碼更容易被他人理解保證代碼可靠性。 這是劉意老師的JAVA基礎(chǔ)教程的筆記講的賊好,附上傳送門 傳智風(fēng)清揚(yáng)-超全面的Java基礎(chǔ) 一、面向?qū)ο笏枷朐O(shè)計(jì)原則 1.單一職責(zé)原則 其實(shí)就是開(kāi)發(fā)人員經(jīng)常說(shuō)的高...

    李昌杰 評(píng)論0 收藏0
  • 《Effective Java》學(xué)習(xí)筆記 第二章 創(chuàng)建和銷毀對(duì)象

    摘要:第二章創(chuàng)建和銷毀對(duì)象何時(shí)以及如何創(chuàng)建對(duì)象,何時(shí)以及如何避免創(chuàng)建對(duì)象,如何確保他們能夠適時(shí)地銷毀,以及如何管理對(duì)象銷毀之前必須進(jìn)行的各種清理動(dòng)作。表示工廠方法所返回的對(duì)象類型。 第二章 創(chuàng)建和銷毀對(duì)象 何時(shí)以及如何創(chuàng)建對(duì)象,何時(shí)以及如何避免創(chuàng)建對(duì)象,如何確保他們能夠適時(shí)地銷毀,以及如何管理對(duì)象銷毀之前必須進(jìn)行的各種清理動(dòng)作。 1 考慮用靜態(tài)工廠方法代替構(gòu)造器 一般在某處獲取一個(gè)類的實(shí)例最...

    tinylcy 評(píng)論0 收藏0
  • js設(shè)計(jì)模式(二)-工廠模式

    摘要:前言設(shè)計(jì)模式填坑系列,緊接前文距離上次寫筆記又過(guò)去了一個(gè)多月,我也不知道怎么加班加著加著就一個(gè)月了正文定義工廠模式是指提供一個(gè)創(chuàng)建對(duì)象的接口而不保留具體的創(chuàng)建邏輯,可以根據(jù)輸入類型創(chuàng)建對(duì)象。 前言 設(shè)計(jì)模式填坑系列,緊接前文(距離上次寫筆記又過(guò)去了一個(gè)多月,我也不知道怎么加班加著加著就一個(gè)月了-_-!) 正文 定義 工廠模式是指提供一個(gè)創(chuàng)建對(duì)象的接口而不保留具體的創(chuàng)建邏輯,可以根據(jù)輸入...

    figofuture 評(píng)論0 收藏0
  • EMF學(xué)習(xí)筆記(三)——使用EMF編程——持久化

    摘要:生成的包首次被訪問(wèn)時(shí),在全局包注冊(cè)表中自動(dòng)地注冊(cè)。然而,類似于資源工廠注冊(cè)表,這種顯式注冊(cè)的過(guò)程僅當(dāng)獨(dú)立運(yùn)行時(shí)被要求,在下運(yùn)行時(shí)通過(guò)擴(kuò)展指針來(lái)自動(dòng)地完成。通過(guò)使用合適的資源工廠,就可以確定被產(chǎn)生的和被使用的持久化形式。 持久化(Persistence)   EMF擁有一個(gè)強(qiáng)大的模型持久化框架。通過(guò)一個(gè)高度可定制資源實(shí)現(xiàn)(resource implementation)來(lái)支持XML序列化...

    villainhr 評(píng)論0 收藏0
  • EMF學(xué)習(xí)筆記(三)——使用EMF編程——持久化

    摘要:生成的包首次被訪問(wèn)時(shí),在全局包注冊(cè)表中自動(dòng)地注冊(cè)。然而,類似于資源工廠注冊(cè)表,這種顯式注冊(cè)的過(guò)程僅當(dāng)獨(dú)立運(yùn)行時(shí)被要求,在下運(yùn)行時(shí)通過(guò)擴(kuò)展指針來(lái)自動(dòng)地完成。通過(guò)使用合適的資源工廠,就可以確定被產(chǎn)生的和被使用的持久化形式。 持久化(Persistence)   EMF擁有一個(gè)強(qiáng)大的模型持久化框架。通過(guò)一個(gè)高度可定制資源實(shí)現(xiàn)(resource implementation)來(lái)支持XML序列化...

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

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

0條評(píng)論

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