Unity3D设计模式之工厂模式

发表于2018-07-12
评论0 2.3k浏览
工厂模式属于创建型设计模式,它提供了一种创建对象的最佳方式。也是本篇文章要重点给大家介绍的内容。

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.缺点
如果产品类太多会导致增加很多的类,会使系统显得很不简洁。
如果将选择逻辑交给用户,则在一定程度上增加了用户对细节的依赖。
与简单工厂模式相比,增加了工厂本身的创建开销。
用户需要创建工厂类本身.(通过一定的方法可以将工厂类的创建委托给抽象类去完成)。
来自:https://blog.csdn.net/battletiger/article/details/77947295

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引