Unity3D设计模式之工厂模式
发表于2018-07-12
工厂模式属于创建型设计模式,它提供了一种创建对象的最佳方式。也是本篇文章要重点给大家介绍的内容。
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