設計模式--工廠模式

工廠方法中的“工廠”和我們平常理解的一樣:用於生產產品。

而客戶是要和產品打交道,所以工廠方法模式的意義在於把客戶和產品分開,達到解耦和更靈活的目的。

一般我們有一個產品的抽象類,然後有幾個具體的產品,如下:

//抽象產品角色
public interface Product{
    void product();
}
//具體產品1
public class Pro1 implements Product{
    @Override
    public void product() {
        System.out.println("產品1");
    }
}
//具體產品2
public class Pro2 implements Product{
    @Override
    public void product() {
        System.out.println("產品2");
    }
}

接着客戶要購買產品,他不直接和產品接觸,而是使用工廠,所以我們有一個工廠:

    public class Factory {  
        public static Product buy(type) {  
            switch (type) {  

            case 1:  
                return new Pro1();  

            case 2:  
                return new Pro2();  

            default:  
                break;  
            }  
            return null;  
        }  
    }  

客戶通過Factory .buy(type);即可購買到自己想要的產品。

————— 這就是 簡單工廠模式,又稱爲 靜態工廠方法模式。

如果新增了一款產品,我們多寫一個產品類Pro3就可以了,但在工廠上我們要添加新的代碼才能生產,這顯然不符合“開閉原則(對擴展開放;對修改封閉)”,所以我們把工廠抽象,添加具體的工廠類,由客戶選擇某一個工廠,如下:

//抽象工廠
public interface Factory {
    Product buy();
}
//具體工廠1
public class Factory1 implements Factory {
    @Override
    public Product buy() {
        return new Pro1();
    }
}
//具體工廠2
public class Factory2 implements Factory {
    @Override
    public Product buy() {
        return new Pro2();
    }
}

當新增了一款產品,我們多創建一個具體的工廠來生產就可以了。但是當產品種類非常多時,會出現大量的與之對應的工廠對象,這並不是我們所希望的。
——— 這就是 工廠方法模式

當產品出現多個抽象時,我們可能會有多個產品接口,這個場景就成了我們所說的
——- 抽象工廠模式

總結:
無論是簡單工廠模式,工廠方法模式,還是抽象工廠模式,他們都屬於工廠模式,在形式和特點上也是極爲相似的,他們的最終目的都是爲了解耦。在使用時,我們不必去在意這個模式到底工廠方法模式還是抽象工廠模式,因爲他們之間的演變常常是令人琢磨不透的。經常你會發現,明明使用的工廠方法模式,當新需求來臨,稍加修改,加入了一個新方法後,由於類中的產品構成了不同等級結構中的產品族,它就變成抽象工廠模式了;而對於抽象工廠模式,當減少一個方法使的提供的產品不再構成產品族之後,它就演變成了工廠方法模式。 所以,在使用工廠模式時,只需要關心降低耦合度的目的是否達到了。

發佈了32 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章