设计模式(一)简单工厂

来源:互联网 发布:猎鲸狂人软件 编辑:程序博客网 时间:2024/04/29 18:51
今天刚开始看设计模式,第一章就讲了简单工厂,书中的计算器例子,很形象的说明了简单工厂是干什么的,简单工厂又称为静态工厂方法模式,属于类的创建型模式。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。

      自己个人理解简单工厂就相当于一个加工过程,就好比将原材料投入到工厂中,根据工厂中车间工作方式的不同,得出对象也就不同。所以在进行加工的同时,工厂会根据客户的要求把原材料分配到能制造出所需产品的车间中去。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 计算器1{    class Program    {        static void Main(string[] args)        {//客户端输入数字,和运算方式                       operation oper;            oper = operationFactory.createOperate("/");            oper.NumberA = 2;            oper.NumberB = 1;            double result = oper.GetResult();            Console.WriteLine("结果是:"+result);            Console.ReadLine();        }        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;            }            }                }}
从上面这个计算器的例子中很容易看出,简单工厂的运行原理,这样做的目的在于,在想要增加新的算法,不用大幅度的去修改代码,只需要增加相应的运算子类和运算类工厂中的switch 分支语句就可以了,这样大大减少了工作量,既省时又省力,还可以避免大幅度修改代码造成的麻烦。

0 0