設計模式之工廠(一)

本文章主要是對Java23種設計模式種的工廠模式進行總結。工廠,顧名思義,就是創建批量化操作的大的工廠。而今天我們也可以利用現實生活中的工廠思維,來理解設計模式的工廠模式。

設計模式之工廠模式共有三種形態:

簡單的工廠模式(靜態工廠模式),工廠方法模式(多態性工廠或者虛擬構造子模式)、抽象工廠模式(工具箱模式)

簡單的工廠模式

所謂的簡單工廠模式,所涉及到的有工廠角色、抽象產品角色以及具體產品角色等三個角色

工廠類:擔任角色的是工廠方法模式的核心,含有與應用緊密相關的具體業務邏輯。工廠類在客戶端的直接調用下創建產品對象,它往往是由一個具體的Java類來實現的

抽象產品:是工廠方法模式所創建的對象的父類,或者是他們共同擁有的接口,抽象產品角色可以用一個Java接口或者抽象類來實現

具體產品:工廠方法模式所創建的任何對象都是這個角色的實例,具體產品角色也是由一個Java類實現的。

下面是一個簡單的小栗子,首先工廠是廚房,抽象類是籠統的菜,實現類就是具體哪個菜。

抽象產品

/**
 * 抽象類角色:food接口,約束類型
 */
public interface IFood {
    /**
     * 提供一個展示食物細節的方法
     * @param foodName 食物名稱
     */
    public void showFood();
}

具體產品-魚、土豆絲

/**
 * 具體食物:土豆絲
 */
public class ShreddedPotatoesFood implements IFood{
    @Override
    public void showFood() {
        System.out.println("一盤土豆絲");
    }
}


/**
 * 具體產品-食物魚
 */
public class FishFood implements IFood
{
    @Override
    public void showFood() {
        System.out.println("一盤魚");
    }
}

工廠角色

/**
 * 工廠角色-食物工廠
 */
public class SimpleFoodFactory {
    /**
     * 提供一個靜態方法,用於獲取食物
     * @param foodType 食物類型
     * @return 具體食物
     */
    public static IFood getFood(String foodType){
        IFood food = null;
        if (foodType.equals("fish")) {
            food = new FishFood();
        }
        if (foodType.equals("potatoes")) {
            food = new ShreddedPotatoesFood();
        }
        return food;
    }
}

客戶端

/**
 * 客戶端
 */
public class MainTest {
    public static void main(String[] args) {
        IFood fishfood = SimpleFoodFactory.getFood("fish");
        fishfood.showFood();
        IFood potatoesfood = SimpleFoodFactory.getFood("potatoes");
        potatoesfood.showFood();
    }
}

通過分析整個簡單工廠模式,我們不難發現:

該模式的核心在於工廠角色,也就是SimpleFoddFacotry類,這個類包含了必要的判斷邏輯,可以決定什麼時候需要創建什麼對象。而此時的客戶端的操作就只有工廠類的身影。所以,用一句話來概括這一優勢,就是簡單工廠模式實現了對責任的分割。

但同時該方法也存在一定的缺陷,對於擔任工廠角色的工廠類的就顯得尤爲吃力,無論是在維護後期的擴展還是維護。

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