设计模式---1:DOTNet设计模式实例之简单工厂模式(Simple Factory Pattern)
1.简单工厂主要解决的问题是:
客户实例化对象时不需要关心该对象是由哪个子类实例化的。
2.简单工厂的模式结构:
IProduct接口:抽象产品类
ConcreteProduct类:产品类的具体实现
Simple Factory简单工厂类
3.实例分析:
其中:
Operation:抽象操作类
AddOperation:加法操作---|产品类的具体实现
SubOperation:减法操作---|产品类的具体实现
SimpleFactory:简单工厂类。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/// <summary>
1、抽象操作类Operation,及其具体实现类AddOperation、SubOperation
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/// <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>
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);
}
}
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/// <summary>
/// 简单工厂类
/// </summary>
/// <param name="operation"></param>
/// <returns></returns>
public static Operation CreateOperation(string operation)
{
Operation o = null;
switch (operation)
{
case "+":
o = new AddOperation();
break;
case "-":
o = new SubOperation();
break;
}
return o;
}
/// 简单工厂类
/// </summary>
/// <param name="operation"></param>
/// <returns></returns>
public static Operation CreateOperation(string operation)
{
Operation o = null;
switch (operation)
{
case "+":
o = new AddOperation();
break;
case "-":
o = new SubOperation();
break;
}
return o;
}
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
static void Main(string[] args)
{
Operation op1 = SimpleFactory.CreateOperation("+");
op1.numberA = 10;
op1.numberB = 20;
Console.WriteLine("{0}+{1}={2}", op1.numberA, op1.numberB, op1.GetResult());
Operation op2 = SimpleFactory.CreateOperation("-");
op2.numberA = 10;
op2.numberB = 20;
Console.WriteLine("{0}-{1}={2}", op2.numberA, op2.numberB, op2.GetResult());
Console.Read();
}
{
Operation op1 = SimpleFactory.CreateOperation("+");
op1.numberA = 10;
op1.numberB = 20;
Console.WriteLine("{0}+{1}={2}", op1.numberA, op1.numberB, op1.GetResult());
Operation op2 = SimpleFactory.CreateOperation("-");
op2.numberA = 10;
op2.numberB = 20;
Console.WriteLine("{0}-{1}={2}", op2.numberA, op2.numberB, op2.GetResult());
Console.Read();
}
4.运行效果
5、总结(Summary)
简单工厂模式是比较简单的一种设计模式,本文对此模式的概念及其设计结构图简单地进行了描述,最后以一个计算器的实例进行了说明。