简单工厂,抽象工厂和Spring.Net(一)
一、简单工厂模式
在我们做项目的时候,我们通常会专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类或者是接口,这种类的创建模式可以称作是简单工厂模式(也可以称作为静态工厂方法),它通常根据一个类的条件来返回不同类的实例。
它的模型图如下所示:
现在我们举一个简单的例子来看一下它的具体用法吧:
下面是专门的负责一个创建实例的类:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace JiSuanQiLib 7 { 8 /// <summary> 9 /// 计算器算法父类 10 /// </summary> 11 public abstract class Calculator 12 { 13 public Calculator() 14 { 15 16 } 17 18 public Calculator(int n1, int n2) 19 { 20 this.Number1 = n1; 21 this.Number2 = n2; 22 } 23 public int Number1 24 { 25 get; 26 set; 27 } 28 29 public int Number2 30 { 31 get; 32 set; 33 } 34 35 public abstract int JiSuan(); 36 } 37 }
下面是一个减法类,这个类继承了我们的Calculator类,代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace JiSuanQiLib { /// <summary> /// 计算加法 /// </summary> public class CalAdd : Calculator { public CalAdd(int n1, int n2) : base(n1, n2) { } public override int JiSuan() { return Number1 + Number2; } } }
下面是一个减法类,它同时也继承了Calculator,并实现了它的抽象方法。
具体代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace JiSuanQiLib { /// <summary> /// 计算减法 /// </summary> public class CalSub : Calculator { public CalSub(int n1, int n2) : base(n1, n2) { } public override int JiSuan() { return Number1 - Number2; } } }
为了实现加减操作,当我们需要CalAdd的时候便通过Calculator类创建一个CalAdd实例,当我们需要CalSub的时候我们便通过Calculator类创建一个CalSub实例。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using JiSuanQiLib; 6 using JiSuanJianFa; 7 8 namespace JiSuanQiTest 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 Console.WriteLine("请输入操作数1:"); 15 int n1 = Convert.ToInt32(Console.ReadLine()); 16 Console.WriteLine("请输入操作符:"); 17 string op = Console.ReadLine(); 18 Console.WriteLine("请输入操作数2:"); 19 int n2 = Convert.ToInt32(Console.ReadLine()); 20 Calculator cal = CreateCal(op, n1, n2); 21 22 if (cal != null) 23 { 24 Console.WriteLine("计算结果为:{0}", cal.JiSuan()); 25 } 26 Console.ReadKey(); 27 28 } 29 30 //简单工厂设计模式。 31 public static Calculator CreateCal(string op, int n1, int n2) 32 { 33 //反射。。 34 Calculator cal = null; 35 switch (op) 36 { 37 case "+": 38 cal = new CalAdd(n1, n2); 39 break; 40 case "-": 41 cal = new CalSub(n1, n2); 42 break; 43 } 44 return cal; 45 } 46 } 47 }
其实我倒是觉得简单工厂模式有点像北京动物园的商场,如果将所有的类型的衣服都继承自一个父类Clothes的话,我们想要什么衣服都可以new出来,那就太好了,当然,这只是个小小的玩笑。