一、简单工厂模式简介(Bref Introduction)
简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖
二、解决的问题(What To Solve)
客户实例化对象时不需要关心该对象是由哪个子类实例化的。
三、简单工厂模式分析(Analysis)
1、简单工厂模式结构

IProduct接口:抽象产品类
ConcreteProduct类:产品类的具体实现
Simple Factory简单工厂类
四.实例分析(Example)
1、场景
一个简单计算器,具有简单的加操作和减操作。结构如下图所示

SimpleFactory:简单工厂类。
Operation:抽象操作类
AddOperation:加法操作
SubOperation:减法操作
2、代码
1、抽象操作类Operation,及其具体实现类AddOperation、SubOperation
/// <summary>
/// 抽象操作类
/// </summary>
public abstract class Operation
{
public int numberA;
public int numberB;
public abstract int GetResult();
}
/// <summary>
/// 加法操作
/// </summary>
public class AddOperation : Operation
{
public override int GetResult()
{
return (this.numberA + this.numberB);
}
}
/// <summary>
/// 减法操作
/// </summary>
public class SubOperation : Operation
{
public override int GetResult()
{
return (this.numberA - this.numberB);
}
}
2、简单工厂类SimpleFactory
/// <summary>
/// 简单工厂类
/// </summary>
public class SimpleFactory
{
public static Operation CreateOperation(string operation)
{
Operation o = null;
switch (operation)
{
case "+":
o = new AddOperation();
break;
case "-":
o = new SubOperation();
break;
}
return o;
}
}
3、客户端代码
static void Main(string[] args)
{
Operation operation1 = SimpleFactory.CreateOperation("+");
operation1.numberA = 10;
operation1.numberB = 20;
Console.WriteLine("{0}+{1}={2}", operation1.numberA, operation1.numberB, operation1.GetResult());
Operation operation2 = SimpleFactory.CreateOperation("-");
operation2.numberA = 10;
operation2.numberB = 20;
Console.WriteLine("{0}-{1}={2}", operation2.numberA, operation2.numberB, operation2.GetResult());
Console.Read();
}
3、实例运行结果

五、总结(Summary)
简单工厂模式是比较简单的一种设计模式,本文对此模式的概念及其设计结构图简单地进行了描述,最后以一个计算器的实例进行了说明。
版权
作者:灵动生活
出处:http://www.cnblogs.com/ywqu
如果你认为此文章有用,请点击底端的【推荐】让其他人也了解此文章
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
/// <summary>
/// 抽象操作类
/// </summary>
public abstract class Operation
{
public int numberA;
public int numberB;
public abstract int GetResult();
}
/// <summary>
/// 加法操作
/// </summary>
public class AddOperation : Operation
{
public override int GetResult()
{
return (this.numberA + this.numberB);
}
}
/// <summary>
/// 减法操作
/// </summary>
public class SubOperation : Operation
{
public override int GetResult()
{
return (this.numberA - this.numberB);
}
}
/// <summary>
/// 简单工厂类
/// </summary>
public class SimpleFactory
{
public static Operation CreateOperation(string operation)
{
Operation o = null;
switch (operation)
{
case "+":
o = new AddOperation();
break;
case "-":
o = new SubOperation();
break;
}
return o;
}
}
static void Main(string[] args)
{
Operation operation1 = SimpleFactory.CreateOperation("+");
operation1.numberA = 10;
operation1.numberB = 20;
Console.WriteLine("{0}+{1}={2}", operation1.numberA, operation1.numberB, operation1.GetResult());
Operation operation2 = SimpleFactory.CreateOperation("-");
operation2.numberA = 10;
operation2.numberB = 20;
Console.WriteLine("{0}-{1}={2}", operation2.numberA, operation2.numberB, operation2.GetResult());
Console.Read();
}

浙公网安备 33010602011771号