Unity3D 设计模式---工厂模式

来源:互联网 发布:淘宝大马士革刀真假 编辑:程序博客网 时间:2024/06/06 01:53

1.工厂模式的定义
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就可以考虑是否需要使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

2.工厂模式的原理
这里写图片描述

3.举例 实现 简单的计算 每次返回结果

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Net;using System.Net.Sockets;namespace Test{    //运算类    public class Operation    {        private double _numberA = 0;        private double _numberB = 0;        public double NumberA        {            get { return _numberA;}            set { _numberA = value; }        }        public double NumberB        {            get { return _numberB; }            set { _numberB = value; }        }        public virtual double GetResult()        {            double result = 0;            return result;        }    }    //加减乘除类    class OperationAdd:Operation    {        public override double GetResult()        {            double result = 0;            result = NumberA + NumberB;            return result;        }    }    //减法    class OperationSub : Operation    {        public override double GetResult()        {            double result = 0;            result = NumberA - NumberB;            return result;        }    }    //乘法    class OperationMul : Operation    {        public override double GetResult()        {            double result = 0;            result = NumberA * NumberB;            return result;        }    }    //除法    class OperationDiv : Operation    {        public override double GetResult()        {            double result = 0;            if (NumberB == 0)                throw new Exception("除数不能为0");            result = NumberA / NumberB;            return result;        }    }    //简单工厂    public class OperationFactory    {        public static Operation createOperate(string operate)        {            Operation oper = null;            switch (operate)            {                case "+":                    oper = new OperationAdd();                    break;                case "-":                    oper = new OperationSub();                    break;                case "*":                    oper = new OperationMul();                    break;                case "/":                    oper = new OperationDiv();                    break;            }            return oper;        }    }    public class Program    {        static void Main(string[] args)        {            Console.Write("请选择运算符号(+ 、- 、*、/、):");            string strOperate = Console.ReadLine();            Operation oper;            oper = OperationFactory.createOperate(strOperate);            Console.Write("请输入数字A:");            oper.NumberA = Convert.ToDouble(Console.ReadLine());            Console.Write("请输入数字B:");            oper.NumberB = Convert.ToDouble(Console.ReadLine());            double result = oper.GetResult();            Console.WriteLine("结果是:" + result);            Console.ReadLine();        }    }}

4.优点
符合开放封闭原则,因为增加新的产品不需要修改原来已有的工厂类,只需要增加相应的工厂即可。
将使用和创建的责任分开。
符合设计的先抽象后具体的顺序。
5.缺点
如果产品类太多会导致增加很多的类,会使系统显得很不简洁。
如果将选择逻辑交给用户,则在一定程度上增加了用户对细节的依赖。
与简单工厂模式相比,增加了工厂本身的创建开销。
用户需要创建工厂类本身.(通过一定的方法可以将工厂类的创建委托给抽象类去完成)。