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

資訊專欄INFORMATION COLUMN

設(shè)計(jì)模式(9)工廠模式(講解+應(yīng)用)

mushang / 2796人閱讀

摘要:工廠模式就是用來創(chuàng)建對(duì)象,生產(chǎn)對(duì)象的。而現(xiàn)在,其全部依賴于工廠類,通過一個(gè)工廠類,實(shí)現(xiàn)解耦。應(yīng)用實(shí)例實(shí)際設(shè)計(jì)中,工廠模式用的也是比較多,而且這種模式也會(huì)比較好辨識(shí),帶有。

目錄

工廠模式

為什么使用工廠模式

應(yīng)用實(shí)例

工廠模式

工廠模式:是一種常用的對(duì)象創(chuàng)建型設(shè)計(jì)模式,此模式的核心精神是封裝類中不變的部分,提取其中個(gè)性化善變的部分為獨(dú)立類,通過依賴注入以達(dá)到解耦、復(fù)用和方便后期維護(hù)拓展的目的。它的核心結(jié)構(gòu)有四個(gè)角色,分別是抽象工廠;具體工廠;抽象產(chǎn)品;具體產(chǎn)品

這里所提到的依賴注入,對(duì)于依賴的創(chuàng)建思想又引出一個(gè)概念:依賴倒置即為高層組件不再依賴底層組件,而底層組件也不再依賴高層組件,而是出現(xiàn)一個(gè)工廠類,高底層組建依賴于這個(gè)工廠類。下面針對(duì)具體的例子來進(jìn)行講解。

為什么使用工廠模式

工廠,生產(chǎn)物品的地方。工廠模式就是用來創(chuàng)建對(duì)象,生產(chǎn)對(duì)象的。一般,我們會(huì)通過new來進(jìn)行對(duì)象的創(chuàng)建,一旦通過new,那么就一定會(huì)有具體的實(shí)例出現(xiàn),也就會(huì)使得該對(duì)象和當(dāng)前類出現(xiàn)緊耦合,產(chǎn)生依賴,使得我們代碼的可擴(kuò)展性和靈活性都變低。繼續(xù)我們上篇文章中工廠生產(chǎn)機(jī)器的例子。

//機(jī)器裝配的基類
public abstract class Machine{
//機(jī)器裝配的流程,final不可被復(fù)寫,保證方裝配算法不被破壞
    final void produce(){
        createFrame();
        addHead();
        addBody();
        if(ifDressup())
            dressUp();
    }
//創(chuàng)建框架
    public abstract void createFrame();
//添加一個(gè)機(jī)器頭
    public abstract void addHead();
//添加一個(gè)機(jī)器的身子
    public abstract void addBody();
//為機(jī)器進(jìn)行裝扮
    public abstract void dressUp();
//判斷是否為該機(jī)器進(jìn)行裝扮
    public boolean ifDressup(){
        return true;
    }

}
//繼承自基類的一個(gè)子類
public class InflatableDoll extends Machine{
    public void createFrame(){
        System.out.println("This is a Frame");
    }

    public void addBody(){
        System.out.println("This is a body");
    }

    public void dressUp(){
        System.out.println("This is a beautiful cloth");
    }

}

這是我們通過模板方法創(chuàng)建來創(chuàng)建我們機(jī)器的一個(gè)例子,那么現(xiàn)在我們有了一個(gè)新的需求,我們要對(duì)這些所有的機(jī)器在出售的時(shí)候要進(jìn)行一個(gè)包裝,根據(jù)客戶點(diǎn)的類型,然后對(duì)其進(jìn)行相應(yīng)的包裝之后,然后才可以出售。不同機(jī)器的包裝流程大致相似的,所以我們可以這樣來寫我們的前臺(tái)銷售部門。

public class Store{

    public void order(String type){
         Machine machine;
        if(type=="inflatedoll"){
            machine = new InflatableDoll();
        }else if(type==""){
            ....
        }
        machine.produce();
        machine.firstPack();
        machine.secondPack();
        machine.thirdPack();
        machine.fourthPack();
    }

}
public class InflatableDoll extends Machine{

    public void firstPack(){
        System.out.prinltn("Add first pack to protect");
    }

    public void secondPack(){
        System.out.prinltn("Add second pack to protect");
    }

    public void thirdPack(){
        System.out.prinltn("Add third pack to protect");
    }

    public void fourthPack(){
        System.out.prinltn("Add fourth pack to protect");
    }
}

但是問題來了,當(dāng)我們的機(jī)器種類不斷增多,對(duì)于機(jī)器類型的判斷,然后創(chuàng)建會(huì)使得我們的代碼變得很繁瑣,而且靈活性很差,按照設(shè)計(jì)模式的原則,封裝變化的,我們將對(duì)與機(jī)器類型的判斷和機(jī)器的創(chuàng)建封裝起來,我們?cè)撨@個(gè)封裝起來的類起了個(gè)名字叫做工廠類,因?yàn)檫@個(gè)工廠類是可以用來產(chǎn)生新的對(duì)象的。封裝代碼如下。

public class MachineFactory{
    public Machine create(String type){
        Machine machine;
        if(type=="inflatabledoll"){
            machine = new InflatableDoll();
        }else if(){
            do something;
        }
        machine.produce();
        return machine;
    }
}

通過這個(gè)工廠類,我們的商店出售類就可以改變了,和具體的機(jī)器實(shí)例實(shí)現(xiàn)解耦和。

public class Store{

    Store(){
        MachineFactory factory = new MachineFactory();
    }

    public void order(String type){
         Machine machine= factory.create(type);
        machine.firstPack();
        machine.secondPack();
        machine.thirdPack();
        machine.fourthPack();
    }
}

頓時(shí)就感覺代碼簡潔了好多,而且條理也變得很清晰了。
通過例子,再去對(duì)我們之前的概念去理解,就會(huì)變得清晰很多,抽象工廠,具體工廠,抽象產(chǎn)品,具體產(chǎn)品。依賴注入,依賴倒置。首先對(duì)于抽象工廠和具體的工廠的理解,因?yàn)槲覀儾煌漠a(chǎn)品可能在其生產(chǎn)上還是存在一些差異,所以通過一個(gè)抽象工廠類作為基類,然后針對(duì)不同的地方分別建立不同的類,根據(jù)這些類,我們來創(chuàng)建我們相應(yīng)的產(chǎn)品,為了實(shí)現(xiàn)商店類和產(chǎn)品的松耦合,我們定義一個(gè)抽象產(chǎn)品類,然后所有的產(chǎn)品都將從這個(gè)抽象類繼承,然后實(shí)現(xiàn)自己的相應(yīng)的方法,然后通過一個(gè)工廠類工廠方法注入實(shí)例,實(shí)例以委托的形式,來執(zhí)行相應(yīng)的操作。
依賴倒置:按照我們的傳統(tǒng)思路,我們商店要出售商品,那么我們的商店就要依賴商品,而這里我們從底層的角度去向高層進(jìn)階,我們有商品,商品的創(chuàng)建需要一個(gè)工廠類,而商店類,則不再依賴于產(chǎn)品,產(chǎn)品也不再依賴于商店類,我們的第一種寫法,在商店類中對(duì)于我們要?jiǎng)?chuàng)建的類進(jìn)行的判斷,我們就可以將其理解為商品對(duì)于商店類的依賴。而現(xiàn)在,其全部依賴于工廠類,通過一個(gè)工廠類,實(shí)現(xiàn)解耦。同時(shí)也使得之前的依賴出現(xiàn)了倒置,又高層依賴底層轉(zhuǎn)為底層依賴高層。

應(yīng)用實(shí)例

實(shí)際設(shè)計(jì)中,工廠模式用的也是比較多,而且這種模式也會(huì)比較好辨識(shí),帶有Factory。比如Android中的

public interface ThreadFactory {
    Thread newThread(Runnable r);
}

下篇更新狀態(tài)模式

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

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

相關(guān)文章

  • 深入理解控制反轉(zhuǎn)(IoC)和依賴注入(DI)

    摘要:本文一大半內(nèi)容都是通過舉例來讓讀者去理解什么是控制反轉(zhuǎn)和依賴注入,通過理解這些概念,來更加深入。這種由外部負(fù)責(zé)其依賴需求的行為,我們可以稱其為控制反轉(zhuǎn)。工廠模式,依賴轉(zhuǎn)移當(dāng)然,實(shí)現(xiàn)控制反轉(zhuǎn)的方法有幾種。 容器,字面上理解就是裝東西的東西。常見的變量、對(duì)象屬性等都可以算是容器。一個(gè)容器能夠裝什么,全部取決于你對(duì)該容器的定義。當(dāng)然,有這樣一種容器,它存放的不是文本、數(shù)值,而是對(duì)象、對(duì)象的描...

    HollisChuang 評(píng)論0 收藏0
  • 設(shè)計(jì)模式--靜態(tài)工廠、簡單工廠方法案例分析

    簡介 1.學(xué)習(xí)本篇文章,了解簡單工廠設(shè)計(jì)模式的使用場景。2.如何使用簡單工廠模式。3.簡單工廠模式能解決什么問題? 場景 現(xiàn)在有一家外賣小店需要從生產(chǎn)一份外賣開始進(jìn)行考慮設(shè)計(jì),當(dāng)客戶在網(wǎng)上點(diǎn)出不同味道的菜時(shí),外賣小店就將按照不同的訂單進(jìn)行生產(chǎn)出菜品,然后進(jìn)行打包、等待外賣小哥獲取、贈(zèng)送給客戶等不同的幾道工序,才算完成一單,但是后期由于生意很好,客戶評(píng)價(jià)很高,有些地方的老板想加盟本店了,那么可能就會(huì)...

    BicycleWarrior 評(píng)論0 收藏0
  • php實(shí)現(xiàn)依賴注入(DI)和控制反轉(zhuǎn)(IOC)

    摘要:工廠模式,依賴轉(zhuǎn)移當(dāng)然,實(shí)現(xiàn)控制反轉(zhuǎn)的方法有幾種。其實(shí)我們稍微改造一下這個(gè)類,你就明白,工廠類的真正意義和價(jià)值了。雖然如此,工廠模式依舊十分優(yōu)秀,并且適用于絕大多數(shù)情況。 此篇文章轉(zhuǎn)載自laravel-china,chongyi的文章https://laravel-china.org/top...原文地址: http://www.insp.top/learn-lar... ,轉(zhuǎn)載務(wù)必保...

    tomato 評(píng)論0 收藏0
  • php設(shè)計(jì)模式

    摘要:我們今天也來做一個(gè)萬能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對(duì)容器接口對(duì)象進(jìn)行操作,第二類是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...

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

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

0條評(píng)論

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