【设计模式】之简单工厂模式

来源:互联网 发布:百灵鸟播音软件下载 编辑:程序博客网 时间:2024/05/29 13:13

                      

一:简单工厂模式:属于创建型模式,不属于23种GOF设计模式之一。

二:作用:由一个工厂对象决定创建哪一种产品类的实例(实例化那个类)。通俗讲工厂就比如现实生活中的一个罐           头加工厂,它决定生产那种类型的罐头(苹果罐头,葡萄罐         头...等等),目的就是能根据客户端动态需求条件有选择的调用工厂中实例化的对象。

三:使用情况:当有多个功能相似的类时,而不知道具体实例化哪个对象

四:实例

       制作一个计算机,能进行简单的运算:加减乘除。

       此例中运算工厂就是罐头加工工厂,里面的苹果罐头、葡萄罐头...就是实例化的对象,买家就相当于客户端,买家想要葡萄罐头,就调用葡萄实例化的对象微笑

      代码解释:

1.面向对象的三大特征:继承性,封装性,多态性,其中加减乘除类实现了封装性和继承性,重用override实现了多态性

2.运算工厂就是用一个单独的类来创建实例的过程(即有选择的实例化子类)

有选择的调用运算工厂的实例对象

        static void Main(string[] args)        {            Operation oper;//声明一个对象            oper = OperationFactory.createOperate("/");//决定用哪个实例化那个对象            oper.NumberA = 12;            oper.NumberB = 0;            double result = oper.GetResult();            Console.WriteLine(result);            Console.Read();        }

    //运算类    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()        {                        return NumberA + NumberB;                   }            }    //减法类    class OperationSub : Operation    {        public override double GetResult()        {            return NumberA - NumberB;        }    }    //乘法类    class OperationMul : Operation    {        public override double GetResult()        {            return NumberA * NumberB;        }    }    //除法类    class OperationDiv : Operation    {        public override double GetResult()        {                        if (NumberB == 0)            {                throw new Exception("除数不能为0");                //Console.WriteLine("除数不能为0");            }            else            {                return NumberA / NumberB;                          }        }    }

简单工厂:实现了实例化子类

    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;//返回一个实例化对象        }    }

由上代码可以看出:   业务逻辑与界面逻辑完全分开了,具体的运算过程在界面是不知道的。

这是以上代码的依赖关系图,有助于理解类彼此之间的关系(工厂调用具体算法,具体算法继承算法抽象类,主函数是调用的算法抽象类)

                    

五:以上可总结出简单工厂的优缺点:

优点:添加需求不用更改客户端,去除了与具体产品的依赖

缺点:违背了开发—封装原则,即需求增加是能添加新的功能(直接添加一个新的功能类就行),但也能修改了(在工厂类中需要修改代码)

0 0
原创粉丝点击