《設計模式之禪》讀書筆記:工廠方法模式

工廠方法模式的定義為:

Define an interface for creating an object , but let subclass decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.(定義一個用于創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。)

在工廠方法模式中,抽象產品類Product 負責定義產品的共性,實現對事物最抽象的定義;Creator 為抽象創建類,也就是抽象工廠,具體如何創建產品類是由具體的實現工廠ConcreteCreator完成的。

1.抽象產品類

public abstract class Product {
    // 產品類的公共方法
    public void method1() {
        // 業務邏輯處理
    }

    // 抽象方法
    public abstract void method2();
}

2.具體產品類

public class ConcreteProduct1 extends Product{
    @Override
    public void method2() {
       //業務邏輯處理
    }
}

3.抽象工廠類

public abstract class Creator {
    public abstract<T extends Product> T createProduct(Class<T> c);
}

4.具體工廠類

public class ConcreteCreator extends Creator{
    public <T extends Product> T createProduct(Class<T> c) {
        Product product=null;
        try {
            product=(Product)Class.forName(c.getName()).newInstance();
        }catch(Exception e) {
            
        }
        return (T)product;
    }
}

5.場景類

public class Client {
    public static void main(String[] args) {
        Creator creator=new ConcreteCreator();
        Product product=creator.createProduct(ConcreteProduct1.class);
    }
}

工廠方法模式的優點

  • 良好的封裝性,代碼結構清晰。創建對象時只需要知道類名就可以了,不用知道創建對象的艱辛過程,降低模塊間的耦合度
  • 優秀的擴展性,增加產品類時只需要修改具體的工廠類或者新增一個工廠類就可以完成系統的擴展。
  • 屏蔽產品類,調用者只需要關心產品的接口,而系統的上層模塊不會發生變化。如使用JDBC連接數據庫,數據庫從MySQL切換到Oracle時只需要切換驅動名稱。
  • 工廠方法模式時典型的解耦框架。高層模塊只需要知道產品的抽象類,其他的實現類都不用關心,符合迪米特法則,我不需要的就不要去交流;也符合依賴倒置原則,只依賴產品類的抽象;當然也符合里氏替換原則,使用產品子類替換產品父類。

工廠方法模式的使用場景

  • 需要生成對象的地方
  • 需要靈活的、可擴展的框架時。如需要設計一個連接郵件服務器的框架,有三種網絡協議可供選擇:IMAP、HTTP、POP3,可以使用這三種連接方法作為產品類。
  • 異構項目中。如使用WebService 與一個非Java項目進行交互時。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 設計模式匯總 一、基礎知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用、多...
    MinoyJet閱讀 3,970評論 1 15
  • 1 場景問題# 1.1 導出數據的應用框架## 考慮這樣一個實際應用:實現一個導出數據的應用框架,來讓客戶選擇數據...
    七寸知架構閱讀 6,800評論 6 75
  • 簡單工廠模式雖然簡單,但存在一個很嚴重的問題。當系統中需要引入新產品時,由于靜態工廠方法通過所傳入參數的不同來創建...
    justCode_閱讀 1,206評論 1 9
  • 設計原則: 要依賴抽象,不要依賴具體類 目錄 本文的結構如下: 什么是工廠方法模式 為什么要用該模式 模式的結構 ...
    w1992wishes閱讀 1,359評論 0 6
  • 記憶中的李禮嬌氣、矯情、還有點小胖,有一個做語文教師的爹,所以除了語文外,其他的學習成績非常一般。 記憶中的李禮,...
    尹可樂閱讀 503評論 0 1