簡單工廠模式(Simple Factory Pattern):定義一個工廠類,它能夠根據參數的不一樣返回不一樣類的實例,被建立的實例一般都具備共同的父類。java
由於在簡單工廠模式用於建立實例的方法是靜態的方法,所以簡單工廠模式又被稱爲靜態工廠方法模式,它屬於類建立型模式。設計模式
儘管簡單工廠模式不屬於GoF23種設計模式之一,可是實際中用途普遍,而且能夠做爲學習「工廠方法模式」以及「抽象工廠模式」的基礎。ide
由圖可知包含如下三個角色:學習
某公司須要開發一個圖表庫,該圖表庫能夠提供各類不一樣外觀的圖表,例如柱狀圖,折線圖等等。測試
首先能夠先設計一個抽象圖表類(這裏是一個接口):優化
interface Chart { 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("顯示折線圖"); } }
最後是工廠類,爲了方便加上了枚舉參數:code
class Factory { public static Chart getChart(Charts charts) { switch(charts) { case PIE_CHART: return new PieChart(); case LINE_CHART: return new LineChart(); case HISTOGRAM_CHART: return new HistogramChart(); default: return null; } } } enum Charts { PIE_CHART,LINE_CHART,HISTOGRAM_CHART; }
測試:xml
public static void main(String[] args) { Chart chart = Factory.getChart(Charts.LINE_CHART); chart.display(); }
爲了簡化簡單工廠模式,能夠將抽象產品類與工廠類合併,將靜態方法移至抽象產品類中:對象
這樣能夠經過抽象產品類的靜態方法獲取子類對象,優化代碼以下:
interface Chart { void display(); static Chart getChart(Charts charts) { switch(charts) { case PIE_CHART: return new PieChart(); case LINE_CHART: return new LineChart(); case HISTOGRAM_CHART: return new HistogramChart(); default: return null; } } }
簡單工廠模式的主要優勢以下:
簡單工廠模式的主要缺點以下: