工廠三兄弟之簡單工廠模式(三)

Liuwei-Sunny發表於2013-07-11

3 完整解決方案

       為了將Chart類的職責分離,同時將Chart物件的建立和使用分離,Sunny軟體公司開發人員決定使用簡單工廠模式對圖表庫進行重構,重構後的結構如圖2所示:

2 圖表庫結構圖

       在圖2中,Chart介面充當抽象產品類,其子類HistogramChartPieChartLineChart充當具體產品類,ChartFactory充當工廠類。完整程式碼如下所示:

//抽象圖表介面:抽象產品類
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;
	}
}

       編寫如下客戶端測試程式碼:

class Client {
	public static void main(String args[]) {
		Chart chart;
		chart = ChartFactory.getChart("histogram"); //通過靜態工廠方法建立產品
		chart.display();
	}
}

       編譯並執行程式,輸出結果如下:

建立柱狀圖!

初始化設定柱狀圖!

顯示柱狀圖!

       在客戶端測試類中,我們使用工廠類的靜態工廠方法建立產品物件,如果需要更換產品,只需修改靜態工廠方法中的引數即可,例如將柱狀圖改為餅狀圖,只需將程式碼:

chart = ChartFactory.getChart("histogram");

       改為:

chart = ChartFactory.getChart("pie");

       編譯並執行程式,輸出結果如下:

建立餅狀圖!

初始化設定餅狀圖!

顯示餅狀圖!


【作者:劉偉 http://blog.csdn.net/lovelion

相關文章