首頁 > 軟體

Java 深入探究講解工廠方法模式

2022-04-06 22:00:19

1. 工廠方法模式介紹

定義:工廠方法模式是對簡單工廠模式進一步的抽象化,好處是可以使系統不修改原來程式碼的情況下引進新的產品,即滿足開閉原則。定義一個用於建立物件介面,讓子類決定範例化哪一個類,使一個類的範例化延遲到子類中。

2. 工廠方法模式類圖UML

3. 工廠方法模式角色說明

抽象工廠(AbstractFactory):提供了建立產品的介面,呼叫方通過它存取具體工廠的工廠方法來建立產品

具體工廠(ConcreteFactory):實現了抽象工廠定義的方法,完成具體產品的建立

抽象產品(Product):定義了產品的規範,描述產品的主要特徵和效能

具體產品(ConcreteProduct):實現了抽象產品的定義的方法,有具體工廠來建立產品,具體工廠和具體產品一一對應

4. 程式碼實現

工廠方法模式實現:

/**
 * 抽象工廠:提供具體工廠的共有方法
 */
public interface Product {
    public void show();
}
​
public class ConcreteProduct1 implements Product {
    @Override
    public void show() {
        System.out.println("具體產品1展示...");
    }
}
​
public class ConcreateProduct2 implements Product {
    @Override
    public void show() {
        System.out.println("具體產品2展示...");
    }
}
​
​
/**
 * 抽象工廠
 */
public interface AbstractFactory {
    public Product createProduct();
}
​
/**
 * 具體工廠1產生具體產品1
 */
public class ConcreteFactory1 implements AbstractFactory {
    @Override
    public Product createProduct() {
        ConcreteProduct1 concreteProduct1 = new ConcreteProduct1();
        System.out.println("具體工廠1建立具體產品1...");
        return concreteProduct1;
    }
    
public class ConcreteFactory2 implements AbstractFactory {
    @Override
    public Product createProduct() {
        System.out.println("具體工廠2產生具體產品2...");
        return new ConcreateProduct2();
    }
}

呼叫方法:

        //獲取具體產品1
        Product product = new ConcreteFactory1().createProduct();
        product.show();
​
        Product product1 = new ConcreteFactory2().createProduct();
        product1.show();

使用步驟:

  • 建立抽象產品類,定義產品的公共方法
  • 建立具體產品類(實現抽象產品介面),定義生成的具體產品
  • 建立抽象工廠類,定義具體工廠的公共介面
  • 建立具體工廠類,定義建立對應具體產品範例的方法
  • 呼叫方呼叫具體的工廠類的方法,從而建立不同具體產品的範例

5. 工廠模式再探究

解決問題:解決了簡單工廠類新增產品需要修改工廠類的方法邏輯問題,即為別開閉原則。

將具體的產品建立退出到工廠類的子類(具體工廠),此時工廠類不再負責所有產品的建立,而是給出具體工廠必須實現的介面,這樣工廠方法在新增新的產品的時候,就不需要修改工廠類的邏輯,而是新增了新的工廠子類,符合開閉原則。

6. 優缺點

優點:

  • 靈活性強,對於新產品的建立,只需要多寫一個對應的工廠類
  • 使用者只需要指導工廠的名稱就可以獲得所要的產品,不需要指導產品具體建立過程

缺點:

  • 類的個數容易過多,增加了複雜度
  • 每一個工廠只能生產一種產品,次弊端可以使用抽象工廠模式解決

7. 應用場景

客戶只關注建立產品的工廠名,不需要知道具體的產品名稱

到此這篇關於Java 深入探究講解工廠方法模式的文章就介紹到這了,更多相關Java 工廠方法 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com