设计模式之简单工厂模式
简单工厂模式解释:
简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
简单工厂模式中包含的角色及其相应的职责如下:
工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。
抽象(Product)产品角色:简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。
具体产品(Concrete Product)角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。
1、编制类图
2、 新建Chart类:抽象图表接口,充当抽象产品类。
3、新建HistogramChart类,表示柱状图类,充当具体产品类。
using System;
namespace SimpleFactorySample
{
class HistogramChart : Chart
{
public HistogramChart()
{
Console.WriteLine("创建柱状图"!);
}
public void Display()
{
Console.WriteLine("显示柱状图!");
}
}
}
4、 新建PieChart类,表示饼状图类,充当具体产品类。
using System;
namespace SimpleFactorySample
{
class PieChart : Chart
{
public PieChart()
{
Console.WriteLine("创建饼状图!");
}
public void Display()
{
Console.WriteLine("显示饼状图!");
}
}
}
5、 新建类LineChart,表示折线图类,充当具体产品类。
using System;
namespace SimpleFactorySample
{
class LineChart : Chart
{
public LineChart()
{
Console.WriteLine("创建折线图!");
}
public void Display()
{
Console.WriteLine("显示折线图!");
}
}
6、 创建图表工厂类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;
}
}
}
7、更新客户端测试类的代码
using System;
using System.Configuration;
namespace SimpleFactorySample
{
class Program
{
static void Main(string[] args)
{
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;
//......
}
}
}
*/
}
8、 编译及运行程序,输出如下结果: