本文主要介紹工廠設計模式的由來和主要形式,分別介紹和分析了普通工廠方法模式、多個工廠方法模式、靜態工廠方法模式以及抽象工廠方法模式。 ... 1.開發環境 IDEA版本: 2022.1.4 JDK版本:17.0.3 2.模式由來 2.1 自定義MailSender類 2.2 自定義Computer類 2.3 分析圖 2.4 案例分析 由於Computer類和MailSender類之間的耦合度比較高,而且創建對象的代碼太固定了,若希望使用簡訊發送的功能需要修改Computer類,這種修改違背了開閉原則,為瞭解決該問題,就可以將創建對象的工作移交出去,而工廠設計模式就是一種創建對象的設計模式,而且可以在創建對象時不對外暴露具體的創建邏輯。 3 普通工廠方法模式 3.1 基本概念 普通工廠方法模式就是建立一個工廠類,通過生產方法的參數來進行具體實例的創建。 3.2 自定義Sender介面 3.3 修改MailSender類 3.4 自定義SmsSender類 3.5 自定義SendFactory類 3.6 修改Computer類 3.7 分析圖 3.8 案例分析 在普通工廠方法模式中,若傳遞的字元串出錯,則不能正確創建對象,而且可能出現空指針異常,所以容錯率不高。 4.多個工廠方法模式 4.1 基本概念 多個工廠方法模式就是通過多個不同的生產方法對實現同一介面的不同實現類分別進行對象的創建。 4.2 修改SendFactory類 4.3 修改Computer類 4.4 分析圖 4.5 案例分析 在多個工廠方法模式中,為了能夠正確創建對象,需要先創建工廠類的對象才能調用工廠類中的生產方法。 5.靜態工廠方法模式 5.1 基本概念 靜態工廠方法模式就是將多個不同的生產方法加上static關鍵字提升為類層級,此時只需要通過類名.的方式就可以進行方法的調用,從而進行不同實例的創建。 5.2 修改SendFactory類 5.3 修改Computer類 5.4 分析圖 5.5 案例分析 靜態工廠方法模式中類的創建依賴工廠類,如果想要擴展程式來生產新的產品,就必須對工廠類的代碼進行修改,這就違背了開閉原則。 6.抽象工廠模式 6.1 基本概念 抽象工廠模式就是將多個不同的生產方法放在不同的工廠類中,讓多個工廠類實現同一個介面,此時只需要通過不同的工廠類就可以進行不同實例的創建。 6.2 自定義SendFactory介面 6.3 自定義MailSendFactory類 6.4 自定義SmsSendFactory類 6.5 修改Computer類 6.6 分析圖 6.7 案例分析 現在想要拓展程式生產新的產品,就只需要增加新的工廠類即可,不用違背開閉原則,同時每個工廠類對應一個產品,符合單一職責的原則。 更多精彩歡迎關註微信公眾號《格子衫007》!