标签:增加 源码 alc factor static cto 实现 stat 调用
工厂模式是用工厂方法代替new操作的一种模式。工厂方法封装了多个相关联类的new方法,每次实例化这些类的时候不需要new多次,只需要调用工厂类的对应方法即可实例化这些类,并且是通过使用一个共同的接口来指向新创建的对象。
简单工厂模式是类的创建模式,又叫做静态工厂方法模式。就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。一般涉及到三种角色。
简单工厂模式优缺点: 
模式的核心是工厂类,这个类负责产品的创建,而客户端可以免去产品创建的责任,这实现了责任的分割。但由于工厂类集中了所有产品创建逻辑的,如果不能正常工作的话会对系统造成很大的影响。如果增加新产品必须修改工厂角色的源码。
简单工厂模式由三种角色组成:
1、工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不通,产生具体的工厂产品。
2、抽象产品角色:它一般是具体产品继承的父类或者实现的接口。
3、具体产品角色:工厂类所创建的对象就是此角色的实例。
下面是利用简单工厂创建的计算器:
 static void Main(string[] args)
        {
/*工厂模式之简单工厂:把对象当成产品去创建*/
            Console.WriteLine("请输入运算");
            int a = 5;
            int b = 3;
            string ys = Console.ReadLine();
ICalc calc = Factory.GetCalc(ys);
            Console.WriteLine(calc.Calc(a, b));
            Console.ReadLine();
}
//工厂方法类
 public class Factory
        {
            public static ICalc GetCalc(string ys)
            {
                ICalc calc = null;//产品变量
                switch (ys)
                {
                    case "+":
                        calc = new Jia();
                        break;
                    case "-":
                        calc = new Jian();
                        break;
                    case "*":
                        calc = new Cheng();
                        break;
                    case "/":
                        calc = new Chu();
                        break;
                    default:
                        break;
                }
                return calc;
            }
        }
//产品接口
 public interface ICalc
        {
            double Calc(int a, int b);
        }
        public class Jia : ICalc
        {
            public double Calc(int a, int b)
            {
                return a + b;
            }
        }
        public class Jian : ICalc
        {
            public double Calc(int a, int b)
            {
                return a - b;
            }
        }
        public class Cheng : ICalc
        {
            public double Calc(int a, int b)
            {
                return a * b;
            }
        }
        public class Chu : ICalc
        {
            public double Calc(int a, int b)
            {
                return a * 1.0 / b;
            }
        }
下面是测试结果:

标签:增加 源码 alc factor static cto 实现 stat 调用
原文地址:https://www.cnblogs.com/HanHeng/p/10565274.html