設計模式:學習筆記(3)——簡單工廠模式
簡單工廠模式
我們都知道工廠是根據產品類的圖紙生產產品的。簡單工廠模式中,一個工廠類處於對產品實例化的中心位置上,它知道每一個產品,他決定哪一個產品類應當被示例化。
簡單工廠模式允許客戶端相對獨立於產品創建的過程,並且在系統引入新產品的時候無需修改客戶端,但是需要修改工廠類,將必要邏輯加入到工廠類中。
簡單工廠模式包括如下角色:
- Factory:工廠角色
- 負責創建具體的產品
- Product:抽象產品角色
- ConcreteProduct:具體產品角色
說明:簡單工廠模式又稱爲靜態工廠方法模式,屬於類創建模式。
模式分析
模式應用
JDK類庫中廣泛使用了簡單工廠模式,如工具類java.text.DateFormat,它用於格式化一個本地日期或者時間。
private static DateFormat get(LocaleProviderAdapter adapter, int timeStyle, int dateStyle, Locale loc) { DateFormatProvider provider = adapter.getDateFormatProvider(); DateFormat dateFormat; if (timeStyle == -1) { dateFormat = provider.getDateInstance(dateStyle, loc); } else { if (dateStyle == -1) { dateFormat = provider.getTimeInstance(timeStyle, loc); } else { dateFormat = provider.getDateTimeInstance(dateStyle, timeStyle, loc); } } return dateFormat; }
優缺點
簡單工廠模式最大的優點在於實現對象的創建和對象的使用分離,將對象的創建交給專門的工廠類負責,但是其最大的缺點在於工廠類不夠靈活,增加新的具體產品需要修改工廠類的判斷邏輯代碼,而且產品較多時,工廠方法代碼將會非常複雜
實例
//抽象圖表接口:抽象產品類 interface Chart { public void display(); } //柱狀圖類:具體產品類 class HistogramChart implements Chart { public HistogramChart() { System.out.println("創建柱狀圖!"); } public void display() { System.out.println("顯示柱狀圖!"); } } //餅狀圖類:具體產品類 class PieChart implements Chart { public PieChart() { System.out.println("創建餅狀圖!"); } public void display() { System.out.println("顯示餅狀圖!"); } } //折線圖類:具體產品類 class LineChart implements Chart { public LineChart() { System.out.println("創建折線圖!"); } public void display() { System.out.println("顯示折線圖!"); } } //圖表工廠類:工廠類 class ChartFactory { //靜態工廠方法 public static Chart getChart(String type) { Chart chart = null; if (type.equalsIgnoreCase("histogram")) { chart = new HistogramChart(); System.out.println("初始化設置柱狀圖!"); } else if (type.equalsIgnoreCase("pie")) { chart = new PieChart(); System.out.println("初始化設置餅狀圖!"); } else if (type.equalsIgnoreCase("line")) { chart = new LineChart(); System.out.println("初始化設置折線圖!"); } return chart; } }
參考資料
- 設計模式Java版
- https://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/simple_factory.html