友情链接:.NET项目开发者博客

简单工厂,抽象工厂和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出来,那就太好了,当然,这只是个小小的玩笑。

posted @ 2013-05-04 00:58  千年老妖  Views(501)  Comments(0Edit  收藏  举报
友情链接:.NET项目开发者博客