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

  • 相关阅读:
    蛙蛙推荐:蛙蛙牌正文提取算法
    javascript太牛了,还能模拟函数式编程
    蛙蛙推荐:编写一个服务监控及管理的软件
    蛙蛙推荐:Remoting超时问题及初步解决方案
    WaTu项目简介
    蛙蛙推荐:基于标记窗的网页正文提取算法的一些细节问题
    【蛙蛙推荐】windbg使用小总结
    蛙蛙推荐:windbg里查看DateTime值
    Enterprise Library :数据访问程序块学习1 dodo
    (转)一个带自定义分页,排序功能的DATAGRID控件(公开源码) dodo
  • 原文地址:https://www.cnblogs.com/hanwenhuazuibang/p/3056998.html
Copyright © 2011-2022 走看看