begin 2018年8月19日19:44:25
html
只要你說的,只要我有,我都給你。java
簡單工廠模式(Simple Factory Pattern):又稱爲靜態工廠方法(Static Factory Method)模式。設計模式分爲建立型模式、結構型模式、行爲型模式,簡單工廠模式屬於建立型模式。在簡單工廠模式中,能夠根據參數的不一樣返回不一樣類的實例。簡單工廠模式專門定義一個類來負責建立其餘類的實例,被建立的實例一般都具備共同的父類。設計模式
工廠角色(Factory):工廠角色負責實現建立全部實例的內部邏輯ide
抽象產品角色(Product):抽象產品角色是所建立的全部對象的父類,負責描述全部實例的公共接口測試
具體產品角色(ConcreteProduct):最終被建立的對象設計
(不知道畫的對不對)code
抽象產品角色(IOperation.java):htm
package com.mingmingcome.designpattern.factory.simplefactory; /** * @className: IOperation * @Description: 運算操做接口 * @author: luhaoming * @date: 2018年8月19日 下午4:43:14 */ public interface IOperation { public int getResult(int a, int b); }
簡單工廠模式所建立的實例的公共接口:運算操做接口。對象
具體產品角色(AddOperationImpl.java、SubOperationImpl.java、MulOperationImpl.java、DivOperationImpl.java):blog
package com.mingmingcome.designpattern.factory.simplefactory; /** * @className: AddOperationImpl * @Description: 加運算實現類 * @author: luhaoming * @date: 2018年8月19日 下午4:46:25 */ public class AddOperationImpl implements IOperation{ @Override public int getResult(int a, int b) { return a + b; } } package com.mingmingcome.designpattern.factory.simplefactory; /** * @className: SubOperationImpl * @Description: 減運算實現類 * @author: luhaoming * @date: 2018年8月19日 下午4:48:55 */ public class SubOperationImpl implements IOperation { @Override public int getResult(int a, int b) { return a - b; } } package com.mingmingcome.designpattern.factory.simplefactory; /** * @className: MulOperationImpl * @Description: 乘運算實現類 * @author: luhaoming * @date: 2018年8月19日 下午4:52:04 */ public class MulOperationImpl implements IOperation { @Override public int getResult(int a, int b) { return a * b; } } package com.mingmingcome.designpattern.factory.simplefactory; /** * @className: DivOperationImpl * @Description: 減運算實現類 * @author: luhaoming * @date: 2018年8月19日 下午4:52:48 */ public class DivOperationImpl implements IOperation { @Override public int getResult(int a, int b) { return a / b; } }
被建立的具體對象:加減乘除運算操做。
工廠角色(SimpleFactory.java):
package com.mingmingcome.designpattern.factory.simplefactory; /** * @className: SimpleFactory * @Description: 簡單工廠類 * @author: luhaoming * @date: 2018年8月19日 下午4:54:20 */ public class SimpleFactory { public static IOperation createOperation(String op) { IOperation operation = null; // 一、適用範圍有限:byte、short、char、int及其包裝類,還有Enum、String // switch(op){ // case "+": // operation = new AddOperationImpl(); // break; // case "-": // operation = new SubOperationImpl(); // break; // case "*": // operation = new MulOperationImpl(); // break; // case "/": // operation = new DivOperationImpl(); // break; // } // 二、全部對象 if ("+".equals(op)) { operation = new AddOperationImpl(); } else if ("-".equals(op)) { operation = new SubOperationImpl(); } else if ("*".equals(op)) { operation = new MulOperationImpl(); } else if ("/".equals(op)) { operation = new DivOperationImpl(); } return operation; } }
負責建立對象的工廠,經過String類型的「+」、「-」、「*」、「」來區分實例化哪一個對象,這個判斷標誌你能夠設置爲你想的任何東西,中文的「加」、「減」、「乘」、「除」也是能夠的。
測試類(SimpleFactoryTest.java):
package com.mingmingcome.designpattern.factory.simplefactory; /** * @className: SimpleFactoryTest * @Description: 簡單工廠模式測試類 * @author: luhaoming * @date: 2018年8月19日 下午5:05:36 */ public class SimpleFactoryTest { public static void main(String[] args) { int a = 999, b = 888; // 加 IOperation operation = SimpleFactory.createOperation("+"); int add = operation.getResult(a, b); System.out.println("a '+' b:" + add); // 減 operation = SimpleFactory.createOperation("-"); operation.getResult(a, b); int sub = operation.getResult(a, b); System.out.println("a '-' b:" + sub); // 乘 operation = SimpleFactory.createOperation("*"); operation.getResult(a, b); int mul = operation.getResult(a, b); System.out.println("a '*' b:" + mul); // 除 operation = SimpleFactory.createOperation("/"); operation.getResult(a, b); int div = operation.getResult(a, b); System.out.println("a '/' b:" + div); } }
一、工廠類含有必要的判斷邏輯,能夠決定在何時建立哪個產品類的實例,客戶端能夠免除直接建立產品對象的責任,而僅僅「消費」產品;簡單工廠模式經過實現了對責任的分割,它提供了專門的工廠類用於建立對象。
二、客戶端無須知道所建立的具體產品類的類名,只須要知道產品類所對應的參數便可,對於一些複雜的類名,經過簡單工廠模式能夠減小使用者的記憶量。本文中客戶端只須要記住「+」、「—」、「*」、「/」就好了。
三、經過引入配置文件,能夠在不修改任何客戶端代碼的狀況下更換和增長新的具體產品類,在必定程度上提升了系統的靈活性。(本文未實現此優勢,挖坑)
一、因爲工廠類集中了全部產品建立邏輯,一旦不能正常工做,整個系統都要受到影響。
二、使用簡單工廠模式將會增長系統中類的個數,在必定程度上增長了系統的複雜度和理解難度。
三、系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,在產品類型較可能是,有可能形成工廠邏輯過於複雜,不利於系統的擴展和維護。
四、簡單工廠模式因爲使用了靜態工廠方法,形成工廠角色沒法造成基於繼承的等級結構。
工廠類負責建立的對象比較少。
簡單工廠模式:客戶端不須要知道具體建立什麼對象,只須要知道參數便可。工廠類負責邏輯判斷建立具體對象,具體產品對象包含着具體實現邏輯。抽象產品類爲具體產品對象類提供同一接口。
參考:
簡單工廠模式( Simple Factory Pattern )
2018年8月21日18:36:51