最近开始看点设计模式,由于我这人脑袋有点笨所以简单工厂模式也是看了几遍才慢慢领悟点意思出来。所以在这里记录下来好日后翻阅。
简单工厂模式又叫做静态工厂方法(StaticFactory Method)模式,简单的来说就是利用一个工厂类来操作处理返回实例化对象。这个工厂就像一个小工厂一样来生产会产品。
下面是简单工厂模式的UML图:
从上图可以看出类Product_A 和类Product_B都继承自基类IProduct并实现基类里的方法(实现出来的这个方法当然是不一样的)。而工厂类Creator的作用就是根据请求的不一样返回不一样的产品类实例化对象,及返回Product_A或Product_B的一个实例化对象。
下面是我自己写的一个简单的计算器demo
1.先创建一个计算的基类,写了一个虚方法便于子类重写这个方法。
public class Operation
{
private double _NumA = 0;
private double _NumB = 0;
public double NumB
{
get { return _NumB; }
set { _NumB = value; }
}
public double NumA
{
get { return _NumA; }
set { _NumA = value; }
}
public virtual double GetResult()
{
double result = 0;
return result;
}
}
2.创建具体的加减乘除的计算类(都继承自基类Opreation)并重写父类方法GetResult(),一下就只给出加法的类
public class OperationAdd:Operation
{
public override double GetResult()
{
return NumA + NumB;
}
}
3.创建工厂类用来实例化不同的对象
public class OperationFactory
{
public static Operation CreatOperator(string operate)
{
Operation op = null;
switch (operate)
{
case "+":
op = new OperationAdd();
break;
case "-":
op = new OperationSub();
break;
}
return op;
}
}
4.然后就是调用了,调用的时候很方便
class Program
{
static void Main(string[] args)
{
Operation op = FFactory.OperationFactory.CreatOperator("+");
op.NumA = 12.29;
op.NumB = 15.12;
Console.WriteLine(op.GetResult());
Console.ReadLine();
}
}
这样一个简单的简单工厂模式就实现了。
简单工厂设计模式也是有缺点的。因为简单工厂模式将实例化对象的所有逻辑都放在一个工厂类里面,如果要添加一个实现类就得去修改工厂类,所以简单工厂模式跟高内聚原则是相悖的,