咳咳,今天繼續學習設計模式中的工廠模式。那麼工廠模式是爲了創建和調用相分離的(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,實現手機接口,然後再定義一個樂視專用的手機工廠就行了,擴展性非常強。
總結:
那麼,最後總結一下:
簡單工廠模式:
用的最多也是最廣的,定義創建一個產品的不同種方法,封裝在一個工廠裏面,比如富士康,一個廠造很多東西,你只需要發需求就好了。
工廠方法模式:
把每一個類型的創建都定義一個工廠,用自己的工廠創建,比如華爲有自己的工廠,三星有自己的工廠,要擴展的話直接創建一個自己的工廠來生產產品。
抽象工廠模式:
這貨是一個產品可能有不同類型的原件組成,但是原件組成一樣,比如手機,要定義自己的工廠,但是工廠的原件不同,導致出來的產品不同,就像高端機,低端機,原件都一樣,但是用料質量不一樣。