設計模式之工廠模式

一、定義

工廠方法(FactoryMethod)模式的定義:定義一個創建產品對象的工廠接口,將產品對象的實際創建工作推遲到具體子工廠類當中。這滿足創建型模式中所要求的“創建與使用相分離”的特點。

應用實例: 1、您需要一輛汽車,可以直接從工廠裏面提貨,而不用去管這輛汽車是怎麼做出來的,以及這個汽車裏面的具體實現。 2、Hibernate 換數據庫只需換方言和驅動就可以。

二、優缺點

優點:

  • 用戶只需要知道具體工廠的名稱就可得到所要的產品,無須知道產品的具體創建過程;
  • 在系統增加新的產品時只需要添加具體產品類和對應的具體工廠類,無須對原工廠進行任何修改,滿足開閉原則;


缺點:

  • 每增加一個產品就要增加一個具體產品類和一個對應的具體工廠類,這增加了系統的複雜度。

三、代碼實現舉例

(1)創建一個接口

public interface Product {
    public void show();
}

(2)創建實現接口的實體類

public class CreateProduct1 implements Product {
    @Override
    public void show() {
        System.out.println("CreateProduct1 show!!!");
    }
}

public class CreateProduct2 implements Product{
    @Override
    public void show() {
        System.out.println("CreateProduct2 show!!!");
    }
}

(3)創建一個工廠,生成基於給定信息的實體類的對象

public class ProductFactory {

    public Product getProduct(String productType){
        if (null == productType || productType.length() < 1){
            return null;
        }
        if (productType.equalsIgnoreCase("PRODUCT1")){
            return new CreateProduct1();
        } else if (productType.equalsIgnoreCase("PRODUCT2")){
            return new CreateProduct2();
        }
        return null;
    }

}

(4)使用該工廠,通過傳遞類型信息來獲取實體類的對象

public class FactoryPatternDemo {
    public static void main(String[] args) {
        ProductFactory  factory = new ProductFactory();
        Product p1 = factory.getProduct("PRODUCT1");
        Product p2 = factory.getProduct("PRODUCT2");
        p1.show();
        System.out.println("--------------------");
        p2.show();
    }
}

結果:

CreateProduct1 show!!!
--------------------
CreateProduct2 show!!!

 

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