先理解一下爲什麼要使用工廠模式:
工廠模式是我們最常用的實例化對象模式
工廠模式實際上包含了3中設計模式,簡單工廠,工廠和抽象工廠,關鍵點如下:
一、三種工廠的實現是越來越複雜的
二、簡單工廠通過構造時傳入的標識來生產產品,不同產品都在同一個工廠中生產,這種判斷會隨着產品的增加而增加,給擴展和維護帶來麻煩
三、工廠模式無法解決產品族和產品等級結構的問題
四、抽象工廠模式中,一個工廠生產多個產品,它們是一個產品族,不同的產品族的產品派生於不同的抽象產品(或產品接口)。
先看一下我們不使用工廠模式,怎麼創建實例,我們以類Sample爲例
Sample sample=new Sample(參數);
帶有參數的初始化,可以使用Sample的構造函數,隨着參數的增加,構造函數需要重構,如果系統中多處實例化Sample,就需要修改大量的代碼。
項目中什麼地方用到工廠模式?
如解析xml中,jdbc連接數據庫等
1. 簡單工廠
public class Factory{
public static ISample creator(int which){
if (which==1)
return new SampleA();
else if (which==2)
return new SampleB();
}
}
那麼在你的程序中,如果要創建ISample的實列時候可以使用
ISample sampleA=Factory.creator(1);
2.工廠方法模式
簡單工廠模式有一個問題就是,類的創建依賴工廠類,也就是說,如果想要拓展程序,必須對工廠類進行修改。假如增加其他品牌鼠標,工廠類需要修改,如何解決?就用到工廠方法模式,創建一個工廠接口和創建多個工廠實現類,這樣一旦需要增加新的功能,直接增加新的工廠類就可以了,不需要修改之前的代碼。
以日誌框架舉例工廠方法模式:
當我們有新的日誌框架加入進來的時候,就不需要修改LoggerFactory類的源代碼,只需要新建一個類,如Log1Factory來實現就可以。
3.抽象工廠模式
抽象工廠模式中,一個工廠生產多個產品,它們是一個產品族,不同的產品族的產品派生於不同的抽象產品(或產品接口)。