1、編制類圖
2、打開vs2010
3、 依次點擊菜單“文件(F)”>新建(N)>”項目(P)”,彈出下面對話框:
4、 在彈出的對話框中,在模板選項下選擇“Visual C#”->“Windows”選項,最後選擇“控制台應用程序”。
5、 在名稱文本(N)框中輸入項目名稱“SimpleFactorySample”,解決方案名稱命名為“SimpleFactorySample”,並設置保存路徑。
6、其它項取默認值,然後點擊“確定按鈕”,將生成下面的解決方案。
7、 新建Chart類:抽象圖表接口,充當抽象產品類。
8、新建HistogramChart類,表示柱狀圖類,充當具體產品類。
using System;
namespace SimpleFactorySample
{
class HistogramChart : Chart
{
public HistogramChart()
{
Console.WriteLine("創建柱狀圖"!);
}
public void Display()
{
Console.WriteLine("顯示柱狀圖!");
}
}
}
9、 新建PieChart類,表示餅狀圖類,充當具體產品類。
using System;
namespace SimpleFactorySample
{
class PieChart : Chart
{
public PieChart()
{
Console.WriteLine("創建餅狀圖!");
}
public void Display()
{
Console.WriteLine("顯示餅狀圖!");
}
}
}
10、 新建類LineChart,表示折線圖類,充當具體產品類。
using System;
namespace SimpleFactorySample
{
class LineChart : Chart
{
public LineChart()
{
Console.WriteLine("創建折線圖!");
}
public void Display()
{
Console.WriteLine("顯示折線圖!");
}
}
11、 創建圖表工廠類ChartFactory,用於充當工廠類
using System;
namespace SimpleFactorySample
{
class ChartFactory
{
//靜態工廠方法
public static Chart GetChart(string type)
{
Chart chart = null;
if (type.Equals("histogram"))
{
chart = new HistogramChart();
Console.WriteLine("初始化設置柱狀圖!");
}
else if (type.Equals("pie"))
{
chart = new PieChart();
Console.WriteLine("初始化設置餅狀圖!");
}
else if (type.Equals("line"))
{
chart = new LineChart();
Console.WriteLine("初始化設置折線圖!");
}
return chart;
}
}
}
12、更新客戶端測試類的代碼
using System;
using System.Configuration;
namespace SimpleFactorySample
{
class Program
{
static void Main(string[] args)
{
/*
Product product;
product = Factory.GetProduct("A"); //通過工廠類創建產品對象
product.MethodSame();
product.MethodDiff();
*/
Chart chart;
//讀取配置文件
string chartStr = ConfigurationManager.AppSettings["chartType"];
chart = ChartFactory.GetChart(chartStr); //通過靜態工廠方法創建產品
chart.Display();
Console.Read();
}
}
}
新建並實現如下類:
using System;
namespace SimpleFactorySample
{
abstract class Product
{
//所有產品類的公共業務方法
public void MethodSame()
{
//公共方法的實現
}
//聲明抽象業務方法
public abstract void MethodDiff();
}
class ConcreteProductA : Product
{
//實現業務方法
public override void MethodDiff()
{
//業務方法的實現
}
}
class ConcreteProductB : Product
{
//實現業務方法
public override void MethodDiff()
{
//業務方法的實現
}
}
class Factory
{
//靜態工廠方法
public static Product GetProduct(string arg)
{
Product product = null;
if (arg.Equals("A"))
{
product = new ConcreteProductA();
//初始化設置product
}
else if (arg.Equals("B"))
{
product = new ConcreteProductB();
//初始化設置product
}
return product;
}
}
}
namespace SimpleFactorySample
{
/*
abstract class Product
{
public abstract void Process();
}
class ConcreteProductA : Product
{
public override void Process()
{
//......
}
}
class ConcreteProductB : Product
{
public override void Process()
{
//......
}
}
class Factory
{
public static Product CreateProduct(char type)
{
switch(type)
{
case 'A':
return new ConcreteProductA(); break;
case 'B':
return new ConcreteProductB(); break;
//......
}
}
}
*/
}
13、 編譯及運行程序,輸出如下結果: