設計模式筆記之----工廠模式

咳咳,今天繼續學習設計模式中的工廠模式。那麼工廠模式是爲了創建和調用相分離的(new的過程在工廠類,調用者只要調用工廠方法聲明去創造就行了),主要是爲了創建一個產品的不同方式封裝。主要有下面3個類型:
1.簡單工廠模式
2.工廠方法模式
3.抽象工廠模式

簡單工廠

應該是用的最多,並且也是最簡單的模式,只需要把對象生成的方法放在一個工廠類就行了,比如我們android開發的bitmapFactory,爲生成bitmap對象封裝了一個工廠,我們只需要通過工廠類直接調用就好了,自己也寫了一個簡單的例子,通過factory創建不同類型的CPU:

package FactoryPattern;

public class SimpleFactory {

    public static void main(String[] args){
        CpuInterface cpu = SimpleFactory.createCpu();
        CpuInterface cpu2 = SimpleFactory.createSuperCpu();
    }

    public static Cpu createCpu(){
        return new Cpu();
    }

    public static SuperCpu createSuperCpu(){
        return new SuperCpu();
    }
}

工廠方法模式

這個用得比較少,用得多的是簡單工廠模式。但是工廠方法模式是更加靈活的,要先把工廠方法抽象成接口,然後每個類型的產品都需要一個創建工廠(實現工廠接口)。
使用的時候是這樣的:

package FactoryPattern;

public class main {

    public static void main(String[] args){
        Cpu cpu = new CpuFactory().createCpu();
        SuperCpu superCpu = new SuperCpuFactory().createCpu();
    }
}

然後CpuFactory和SuperCpuFactory都分別是創建Cpu 和SuperCpu 分別定義的工廠類,他們都是含有createCpu()方法接口的子類:

package FactoryPattern;

public interface CpuFactoryInf {

    CpuInterface createCpu();
}

抽象工廠模式

抽象方法在我看來其實就是高級一點的工廠方法,具有抽象的工廠方法接口。抽象工廠網上很多說是創建一個產品簇,產品簇其實是一個含有多個原件組成的產品類型,比如汽車,無論是什麼汽車他們的原件都一樣,都有發送機,輪胎,座椅等等,但是有好車,有低價位車,唯一區別就是原件類型不同,所以抽象工廠模式是創建不同原料組成的產品類型,也就是產品簇,類似一個品牌的手機,有高端機,低端機。

這裏練習的例子是組裝手機,目錄如下:
這裏寫圖片描述

我需要創造兩個手機,一個huawei,一個xiaomi,於是定義製造手機的接口:

package FactoryPattern.FactoryAbs;

import FactoryPattern.FactoryAbs.cpu.CpuInf;

public interface MobilePhoneInf {

    void call();

    void setCpu(CpuInf cpu);

    void setMemory(Memory memory);
}

然後定義配件,只定義了cpu、memory,其中cpu分爲普通cpu和cpu_hi(華爲自己的cpu),然後定義一個工廠接口:

package FactoryPattern.FactoryAbs.factory;

import FactoryPattern.FactoryAbs.MobilePhoneInf;

public interface MobileFactory {

    MobilePhoneInf createPhone();
}

於是華爲手機有華爲手機自己的工廠,小米有小米的工廠,每個工廠的createPhone方法不同,也就是組裝的方法是自己定義的。於是結果就是:

Huawei huawei = new HuaweiFactory().createPhone();
        Xiaomi xiaomi = new XiaomiFactory().createPhone();

調用非常簡單,如果需要擴展產品,比如樂視需要做手機,那麼只需要定義一個Leshi.java,實現手機接口,然後再定義一個樂視專用的手機工廠就行了,擴展性非常強。

總結:

那麼,最後總結一下:

簡單工廠模式:

用的最多也是最廣的,定義創建一個產品的不同種方法,封裝在一個工廠裏面,比如富士康,一個廠造很多東西,你只需要發需求就好了。

工廠方法模式:

把每一個類型的創建都定義一個工廠,用自己的工廠創建,比如華爲有自己的工廠,三星有自己的工廠,要擴展的話直接創建一個自己的工廠來生產產品。

抽象工廠模式:

這貨是一個產品可能有不同類型的原件組成,但是原件組成一樣,比如手機,要定義自己的工廠,但是工廠的原件不同,導致出來的產品不同,就像高端機,低端機,原件都一樣,但是用料質量不一樣。

源碼:http://download.csdn.net/detail/cloud_huan/9745212

發佈了127 篇原創文章 · 獲贊 152 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章