簡單工廠模式又稱為靜態工廠模式是設計模式的基礎模式,本文首先介紹了創建型設計模式的特點,使用場景,然後介紹了簡單工廠模式的概念,特點,示例代碼,以及簡單工廠模式的缺點 ...
創建型模式
創建型模式不同於其他模式,因為程式語言本身是支持創建對象實例的 比如使用new關鍵字,比如通過反射創建,通過clone()方法創建對象 也可以在構造方法中對創建邏輯進行干預 那麼,為什麼還需要創建型模式?創建型概念特點
先看下前文說過的創建型模式概念創建型模式是用來創建對象的模式,抽象了實例化的過程,封裝了創建邏輯 1. 將系統所使用的具體類的信息封裝起來 2. 隱藏了類的實例是如何被創建和組織的 |
場景
當你需要對客戶端程式隱藏實際的對象類型時 當你想要隱藏實例對象的業務創建邏輯時 當你想要把對象的使用與創建進行分離時 等等想要更加個性化定製對象的創建過程的時候 都可以考慮使用創建型模式簡單工廠模式
而工廠模式是簡單常用的一種創建型模式
概念
工廠模式是最基本的創建型模式,他有三種形式,簡單工廠,工廠方法,抽象工廠 其中最基本的是簡單工廠形式,簡單工廠形式簡單到很多時候不被稱為一種模式,更像是一種經驗習慣 簡單工廠模式藉助於工廠類的靜態方法,根據參數的不同情況創建不同的對象 簡言之就是:有一個類,他有一個靜態方法, 這個靜態方法根據條件判斷需要創建的對象的類型示例代碼
考慮下麵的這種場景 有水果類(抽象類、介面)Fruit用於描述水果 另有具體的水果(實現類)蘋果Apple 橘子Orange 有一個簡單的水果店SimpleFruitFactory 能夠銷售提供所有的水果 |
![image_5be1399f_7e53 image_5be1399f_7e53](https://img2018.cnblogs.com/blog/897393/201811/897393-20181106145155848-366084377.png)
package simpleFactory; /** * Created by noteless on 2018/10/9. * Description: */ public interface Fruit { String description(); }
package simpleFactory; /** * Created by noteless on 2018/10/9. * Description: */ public class Apple implements Fruit { @Override public String description() { return "apple"; } }
package simpleFactory; /** * Created by noteless on 2018/10/9. * Description: */ public class Orange implements Fruit { @Override public String description() { return "Orange"; } }
package simpleFactory; /** * Created by noteless on 2018/10/9. * Description: */ public enum FruitType { APPLE, ORANGE }
package simpleFactory; /** * Created by noteless on 2018/10/9. * Description: */ public class SimpleFruitFactory { public static Fruit create(FruitType fruitType){ if(fruitType.equals(FruitType.APPLE)){ return new Apple(); }else if(fruitType.equals(FruitType.ORANGE)){ return new Orange(); } return null; } }測試代碼
![image_5be1399f_4868 image_5be1399f_4868](https://img2018.cnblogs.com/blog/897393/201811/897393-20181106145156275-1474428950.png)
結構
通過示例可以看得出來,簡單工廠模式的確很簡單 關鍵點就是這個靜態create方法,內部使用if else結構或者switch結構 由於通常都是靜態方法,所以又叫做靜態工廠方法模式 模式如下圖所示![image_5be1399f_34dd image_5be1399f_34dd](https://img2018.cnblogs.com/blog/897393/201811/897393-20181106145156669-428486050.png)
特點
簡單工廠模式特點: 靜態方法、根據參數確定待創建對象的類型 當然,也可以不在一個方法中處理,也可以創建多個方法來創建不同的具體產品對象 而且,如果產品只有一種的話,也可以省略抽象的產品Product角色![image_5be1399f_54d5 image_5be1399f_54d5](https://img2018.cnblogs.com/blog/897393/201811/897393-20181106145157056-944204391.png)