從設計模式的類型上來講,簡單工廠模式是屬於建立型模式,又叫作靜態工廠方法(StaticFactory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠對象決定建立出哪種產品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,能夠理解爲是不一樣工廠模式的一個特殊實現。 html
下面模擬使用簡單工廠模式實現的需求:java
需求:假設如今的咱們須要對數據庫中的內容進行輸出,須要依賴於一個輸出的類,但如今有兩種方式進行輸出,分別是:excel與word;(這裏我簡單模擬,所以代碼會很簡單);數據庫
首先咱們先用寫一個輸出方式的接口,代碼以下:編程
public interface Print { public void outPrint(); }
2.而後須要寫出它的兩個實現類,以下:
excel方式:設計模式
public class ExcelImpl implements Print { @Override public void outPrint() { System.out.println("使用excel進行導出"); } }
word方式:ide
public class WordImpl implements Print { @Override public void outPrint() { System.out.println("使用word進行導出"); } }
3.而後實現一個工廠類:this
public class PrintFactory { /** * 用於獲取print實例的方法 * */ public Print getPrint() { /** * 這裏默認返回的是excel方式進行導出 * */ return new ExcelImpl(); } }
4.進行簡單工廠方式的實現:編碼
public class DataOutput { public static void main(String[] args) { /** * 實例化工廠類 * */ PrintFactory printFactory = new PrintFactory(); /** * 實例化調用的類,經過構造方法來對DataOutput對象進行初始化 * */ DataOutput dataOutput = new DataOutput(printFactory.getPrint()); dataOutput.output(); } private final Print print; public DataOutput(Print print) { this.print = print; } /** * 模擬導出,這裏就是須要調用其餘對象中的方法進行實現 */ public void output() { print.outPrint(); } }
好了,接下來咱們只要點擊運行就會在控制檯出現:使用excel進行導出;
若是因爲需求的改變須要使用word來進行導出,很簡單,咱們只須要修改工廠類中的方法便可,其餘都不須要變:spa
public class PrintFactory { /** * 用於獲取print實例的方法 * */ public Print getPrint() { /** * 這裏默認返回的是excel方式進行導出 * */ // return new ExcelImpl(); /** * 更改成使用word方式進行導出 * */ return new WordImpl(); } }
到此咱們已經實現了一個簡單工廠模式,咱們可以很明顯的感受到該模式的優點:讓對象的調用者與對象建立過程進行分離,當對象調用者須要對象時只需直接向工廠請求便可,
從而避免了對象調用者與對象實現類以硬編碼方式進行耦合。就如上面的程序,即便Print接口有不少實現類,咱們只須要到工廠類中進行更換實現類的實例化便可,其餘不須要設計
更改,這裏也顯示了面向接口編程的優點,這樣對象的調用者就與接口進行耦合而不是與實現類,與接口耦合的好處就是接口能夠有多個實現類,保證了咱們能夠不去修改接口,
而只是添加或者修改一個實現類便可;
總結下簡單工廠模式:不知道你們有沒有發現一個問題就是上面管理實例分配的工廠類中,如今只能每次爲其分配一個實例,若是要配置多個實例就須要在工廠類中就行邏輯
判斷:
public class PrintFactory { /** * 用於獲取print實例的方法 * */ public Print getPrint(Integer param) { if(param == 1) { /** * 這裏默認返回的是excel方式進行導出 * */ return new ExcelImpl(); } else if(param == 2) { /** * 更改成使用word方式進行導出 * */ return new WordImpl(); } else { return null; } } }
簡單工廠模式的有缺點:
優勢:該模式的核心就是工廠類,這個類中含有必要的判斷邏輯,能夠決定在何時建立哪一個產品類的實例。客戶端能夠免除直接建立產品對象的責任。
缺點:1.工廠類集中了全部產品建立邏輯,造成一個無所不知的全能類,對於這樣的類咱們很難進行控制