23種設計模式-工廠方法模式介紹加實戰程式碼

1、描述

工廠方法模式是對簡單工廠模式的抽象提取。有一個抽象的 Factory 類(可以是抽象類和介面),這個類將不再負責具體的產品生產,而是只制定一些規範,具體的生產工作由其子類去完成。在這個模式中,工廠類和產品類往往可以依次對應。即一個抽象工廠對應一個抽象產品,一個具體工廠對應一個具體產品,這個具體的工廠就負責生產對應的產品。

2、適用性

相對於簡單工廠模式,工廠方法模式在系統增加新的產品時只需要添加具體產品類和對應的具體工廠類,無須對原工廠進行任何修改,滿足開閉原則;

3、實現邏輯

  • 抽象產品類 :工廠類所創建的所有對象的超類,它負責描述所有實例所共有的公共介面。定義產品的規範,描述了產品的主要特性和功能。
  • 具體產品類 :實現或者繼承抽象產品的子類;是工廠模式的創建目標,所有創建的對象都是充當這個角色的某個具體類的實例。在工廠方法模式中某具體產品有專門的具體工廠創建,它們之間往往一一對應。
  • 抽象工廠類:是工廠方法模式的核心,與應用程式無關。任何在模式中創建的對象的工廠類必須實現這個介面。制定具體工廠類的規範。
  • 具體工廠類:主要是實現抽象工廠中的抽象方法,完成具體產品的創建。

4、實戰程式碼

通過從飲品店生成茶和咖啡為例;

/**
 * 抽象產品類
 *
 * @author Eajur.Wen
 * @version 1.0
 * @date 2022-11-05 18:24:11
 */
public abstract class Drinks {
}

/**
 * 具體產品類
 *
 * @author Eajur.Wen
 * @version 1.0
 * @date 2022-11-05 18:26:36
 */
public class Coffee extends Drinks {

    public Coffee() {
        System.out.println("Coffee");
    }
}

/**
 * 具體產品類
 *
 * @author Eajur.Wen
 * @version 1.0
 * @date 2022-11-05 18:29:14
 */
public class Tea extends Drinks {

    public Tea() {
        System.out.println("Tea");
    }
}

/**
 * 抽象工廠類
 *
 * @author Eajur.Wen
 * @version 1.0
 * @date 2022-11-06 08:03:13
 */
public interface DrinksFactory {
    Drinks createDrinks();
}

/**
 * 具體工廠類
 *
 * @author Eajur.Wen
 * @version 1.0
 * @date 2022-11-05 18:19:53
 */
public class CoffeeFactory implements DrinksFactory {

    @Override
    public Coffee createDrinks() {
        return new Coffee();
    }
}

/**
 * 具體工廠類
 *
 * @author Eajur.Wen
 * @version 1.0
 * @date 2022-11-05 18:19:53
 */
public class TeaFactory implements DrinksFactory {

    @Override
    public Tea createDrinks() {
        return new Tea();
    }
}

/**
 * 測試類
 *
 * @author Eajur.Wen
 * @version 1.0
 * @date 2022-11-05 18:41:14
 */
public class Client {

    public static void main(String[] args) {
        DrinksFactory drinksFactory = new CoffeeFactory();
        TeaFactory teaFactory = new TeaFactory();
        drinksFactory.createDrinks();
        teaFactory.createDrinks();
    }
}

客戶端執行結果:

從以上的編寫的程式碼可以看到,要增加產品類時相應的增加工廠類,不需要修改工廠類的程式碼了,這樣就解決了簡單工廠模式新增產品時需要修改工廠類的缺點。

工廠方法模式是簡單工廠模式的進一步抽象。由於使用了多態性,工廠方法模式保持了簡單工廠模式的優點,而且克服了它的缺點。