设计模式之简单工厂模式
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、 编译及运行程序,输出如下结果: