简单工厂模式太简单了,简单地连GOF23种设计模式里都不愿意收录它,但是我们还得从它来理解工厂模式。
using System;
namespace OperateFactory
{
class Program
{
static void Main(string[] args)
{
//4.使用工厂类产生实例
Operate operate = OperateFactory.GetInstance('+');
operate.N1 = 3.14;
operate.N2 = 2;
Console.WriteLine(operate.GetResult());
//5.最后,我们传参时传不同的参,比如参数为'-',就可以不改动一句代码,实现不同的运算,得到不同的结果。
}
}
/// <summary>
/// 1.先建立一个运算类,是加减乘除余等运算的父类
/// </summary>
public abstract class Operate
{
public double N1 { get; set; }
public double N2 { get; set; }
//抽象类的抽象方法(可以没有方法地实现)
public abstract double GetResult();
}
/// <summary>
/// 2.建立N个子类,继承Operate
/// </summary>
public class AddOperate : Operate
{
public override double GetResult()
{
return N1 + N2;
}
}
/// <summary>
/// 子类2
/// </summary>
public class SubOperate : Operate
{
public override double GetResult()
{
return N1 - N2;
}
}
/// <summary>
/// 3.构建简单工厂类,包含一个返回子类实例的方法.这样通过父类对象指向子类的实例,达到加减乘除不同的结果,这是典型的多态的使用方法。
/// </summary>
public class OperateFactory
{
//一般用静态方法,由此得名静态工厂
public static Operate GetInstance(char c)
{
Operate o = null;
switch (c)
{
case '+':
o = new AddOperate();
break;
case '-':
o = new SubOperate();
break;
default:
o = null;
break;
}
return o;
}
}
}
倒数第2要补充的:
子产品(子类)里没有判断(到底是生产哪个产品)语句,判断是在工厂里判断的;
工厂生产产品,所以工厂有个返回子类类型的方法。
在主程序里用多态:基类 o=工厂.get类(参数); //注意工厂这个方法返回的是子类对象(这就是关键所在,你可以认为是这个工厂的厂花……这样能惦记住了吧?)
最后:
构建简单工厂类的时候,利用多态,我们可以三种方法实现简单工厂类:
No1 使用静态方法,从而使用静态类,然后可以实现方法也可以不实现;
No2 使用virtual方法,必须有实现;
No3 使用接口,不能有实现。