簡單工廠模式(靜態工廠方法模式)

定義:

簡單工廠模式(Simple Factory Pattern):定義一個工廠類,它可以根據參數的不同返回不同的實例,被創建的實例通常都具有相同的父類。因爲在簡單工廠模式中用於創建實例的方法是靜態(static)方法,因此簡單工廠模式又被稱爲靜態工廠方法(Static Factory Method)模式,它屬於類創建型模式。

嚴格來講,簡單工廠模式並不屬於23中設計模式,但是它在軟件設計和開發中也經常使用,而且學習它可以幫助我們更加深入理解其他工廠模式。

簡單工廠模式的UML圖如下所示:

簡單工廠模式實現的方法是:

首先將需要創建的各種不同對象的相關代碼封裝到不同的類中,這些類稱爲具體產品類,而將它們的公共的代碼進行抽象和提取後,封裝在一個抽象產品類中,每一個具體產品類都是抽象產品類的子類;

然後提供一個工廠類用於創建各種產品,在工廠類中提供一個創建產品的工廠方法,該方法可以根據所傳入的參數的不同創建不同的具體產品對象,客戶端只需調用工廠類的工廠方法並傳入相應的參數即可得到一個具體產品對象。

簡單工廠模式的要點在於:

當你需要什麼具體產品對象,只需要傳入一個正確的參數,就可以得到你需要的對象,而無需知道其創建的細節。

簡單工廠模式的Java代碼實現如下:


/**
 * 抽象產品類
 */
public abstract class Product {

    //所有產品類的公共業務方法
    public void methodSame() {
        //公共方法的實現
    }

    //聲明抽象的業務方法,由不同的產品子類來實現
    public abstract void methodDiff();

}
/**
 * 具體產品類
 */
public class ConcreteProductA extends Product {

    //實現具體的業務方法
    @Override
    public void methodDiff() {

    }
}
/**
 * 具體產品類
 */
public class ConcreteProductB extends Product {

    //實現具體的業務方法
    @Override
    public void methodDiff() {

    }
}
/**
 * 工廠類
 */
public class Factory {


    //靜態工廠方法,根據所傳的參數,創建不同的具體產品
    public static Product getProduct(String arg) {
        Product product = null;
        if ("A".equals(arg)) {
            product = new ConcreteProductA();
        } else if ("B".equals(arg)) {
            product = new ConcreteProductB();
        }

        return product;
    }
}


public class Client {

    public static void main(String[] args) {
        //在客戶端類中,通過工廠類創建具體產品對象
        Product product = Factory.getProduct("A");
        product.methodSame();
        product.methodDiff();
    }
}

簡單工廠模式提供了專門的工廠類用於創建對象,將對象的創建和對象的使用分離開,它的主要優點如下:

1.工廠類包含必要的判斷邏輯,可以決定在什麼時候創建哪一個產品類的實例,客戶端可以免除直接創建產品對象的職責,而僅僅“消費”產品。簡單工廠模式實現了對象的創建和使用分離;

2.客戶端無須知道所創建的具體產品類的類名,只需要知道具體產品類所對應的參數即可,對應一下複雜的類名,通過簡單工廠模式可以在一定程度上減少使用者的記憶量;

3.通過引入配置文件,可以在不修改任何客戶端代碼的情況下更換和增加新的具體產品類,在一定程度上提高了系統的靈活性。

簡單工廠模式的主要缺點如下:

1.由於工廠類集中了所有產品的創建邏輯,職責過重,一旦不能正常工作,整個系統都要受到影響;

2.使用簡單工廠模式勢必會增加系統中類的個數(引入了新的工廠類),增加了系統的複雜度和理解難度;

3.系統擴展困難,一旦添加新產品就不得不修改工廠類的邏輯,在產品類型較多時,有可能會造成工廠類的邏輯過於複雜,不利於系統的擴展和維護;

4.簡單工廠模式由於使用了靜態工廠方法,造成工廠角色無法形成基於繼承的等級機構。

簡單工廠模式的適用場景如下:

1.工廠類負責創建的對象比較少,由於創建的對象較少,不會造成工廠方法中的業務邏輯太過複雜;

2.客戶端只知道傳入工廠類的參數,對於如何創建對象並不關心。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章