Java23種設計模式之-----簡單工廠模式

一、什麼是簡答工廠模式?
簡答工廠模式屬於類的創建模式,又叫做靜態工廠方法模式。通過專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。
(1)、創建Apple類

package com.renxin.simplefactory;

public class Apple implements Fruit{
    /**
     * 採集蘋果
     */
    public void get() {
        System.out.println("採集蘋果!");
    }
}

(2)、創建Banana類

package com.renxin.simplefactory;

public class Banana implements Fruit{
    /**
     * 採集香蕉
     */
    public void get() {
        System.out.println("採集香蕉!");
    }
}

(3)、創建接口Fruit

package com.renxin.simplefactory;

public interface Fruit {

    public void get();
}

(4)、創建測試類MainClass

package com.renxin.simplefactory;

public class MainClass {

    public static void main(String[] args) {
        //實例化Apple,這裏用到了多態
        Fruit apple = new Apple();
        apple.get();
        //實例化Banana
        Fruit banana = new Banana();
        banana.get();


    }

}

以上代碼它們都有一個共同的Fruit父類!
控制檯打印結果爲:

採集蘋果!
採集香蕉!

(5)、定義一個類來負責創建其他類的實例FruitFactory

package com.renxin.simplefactory;

public class FruitFactory {
    /**
     * 獲得Apple類的實例
     */
    public static Fruit getApple() {
        return new Apple();
    }
    /**
     * 獲得Banana類的實例
     */
    public static Fruit getBanana() {
        return new Banana();
    }
}

(6)、修改測試類MainClass

    //實例化Apple和Banana
    Fruit apple = FruitFactory.getApple();
    Fruit banana = FruitFactory.getBanana();
    apple.get();
    banana.get();

控制檯輸出結果爲:

採集蘋果!
採集香蕉!

以上代碼就是對簡單工廠模式的實現,通過專門一個類來負責創建其他類的實例,這些被創建的實例都有一個共同的父類Fruit。
這裏我們可以發現FruitFactory存在一定的冗餘,因此我們可以修改FruitFactory類

    /**
     * get方法,獲取所有產品對象
     * @throws IllegalAccessException 
     * @throws InstantiationException 
     * 
     */
    public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException {
        if(type.equalsIgnoreCase("apple")) {
            return Apple.class.newInstance();
        }else if(type.equalsIgnoreCase("banana")) {
            return Banana.class.newInstance();
        }else {
            System.out.println("找不到相應的實例化類!");
            return null;
        }
    }

修改測試類MainClass

Fruit apple = FruitFactory.getFruit("apple");
Fruit banana = FruitFactory.getFruit("banana");
apple.get();
banana.get();

二、模式中包含的角色及其職責
1、工廠(Creator)角色(也就是上面FruitFactory類):簡單工廠模式的核心,它是負責實現創建所有實例的內部邏輯。工廠類可以被外界直接調用,創建所需的產品對象。
2、抽象(Product)角色(也就是上面的Fruit接口):簡單工廠模式所創建的所有對象的父類,它是負責描述所有實例所共有的公共接口。
3、具體產品(Concrete Product)角色(也就是上面的Apple和Banana):簡單工廠模式所創建的具體實例對象。
三、簡單工廠模式的優缺點
在這個模式中,工廠類是整個模式的關鍵所在。它包含必要的判斷邏輯,能夠根據外界給定的信息,決定究竟應該創建那個具體類的對象。用戶在使用時可以直接根據工廠類去創建所需要的實例,而無需瞭解這些對象是如何創建以及如何組着的。有利於整個軟件體系結構的優化。
不難發現,簡單工廠模式的缺點也正體現在其工廠類上,由於工廠類集中了所有實例的創建邏輯,所以“高內聚”方面做的並不好。另外,當系統中的具體產品類不斷增多時,可能出現要求工廠類也做好相應的修改,擴展性不是很好。

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