现在的位置: 首页 > 综合 > 正文

简单工厂设计模式

2013年08月25日 ⁄ 综合 ⁄ 共 2333字 ⁄ 字号 评论关闭

                                                                                          
简单工厂设计模式

 刚开始学设计模式,犹如刚睁开眼看世界的孩子,满眼都是惊奇,原来代码的世界可以如此的精彩纷呈.当然这些都是前辈智慧的结晶.简单工厂设计模式是接触的第一个设计模式,看完后更多的是不懂和迷糊.不过相信慢慢会懂得其精髓的.

       简单工厂设计模式是创建型(就是把对象的创建和使用分离)模型,又叫静态工厂方法(StaticFactoryMethod)模式.但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简言之简单工厂模式的本质就是选择实现,重点在于选择,因为实现类已经写好了.其目的在于为客户端来选择相应的实现,从而使得客户端和实现之间降低耦合,这样一来,具体实现发生了变化,就不用变动客户端了,这个变化会被简单工厂模式屏蔽掉.

       也因此当我们想要完全封装隔离具体实现,让外部只能通过接口来操作封装体,那么可以选用简单工厂,让客户端通过工厂来获取相应的接口,而无需关心具体实现.如图我们如果想实现一个简单的计算器.

 

 代码如下

 //首先定义运算类        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 OperationPlus : Operation
            {
                public override double GetResult() //重写基类的方法
                {
                    double result = 0;
                    result = NumberA + NumberB;
                    return result;
                }
            }
        //定义减法类,继承了运算类
            class OperationMinus : 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("除数不能为零");
                    result = NumberA / NumberB;
                    return result;
                }
            }



        
        //创建工厂
        public class OperationFactory
        {
            public static Operation createOperate(string operate)
            {
                Operation oper = null;
                switch (operate)
                {
                    case "+":
                        oper = new OperationPlus();
                        break;
                    case "-":
                        oper = new OperationMinus();
                        break;
                    case "*":
                        oper = new OperationMul();
                        break ;
                    case "/":
                        oper = new OperationDiv();
                        break;

                }
                return oper;
            }
        }
         
    //工厂对类实例化的代码范例如下
 static void Main(string[] args)
        {
           
            Operation oper;
            Console.WriteLine("请输入A");
            oper.NumberA =Convert.ToDouble( Console.ReadLine());

            oper = OperationFactory.createOperate("+");
            
            oper.NumberB = 2;
            double result = oper.GetResult();
            Console.WriteLine(Convert.ToString(result));
        }

简单工厂虽然很简单,但是非常友好的帮助我们实现了组件的封装,然后让组件外部能真正面向接口编程。通过简单工厂,实现了客户端和具体实现类的分离。如同上面的例子,客户端根本就不知道具体是由谁来实现,也不知道具体是如何实现的,客户端只是通过工厂获取它需要的接口对象。

         简单工厂模式优点是有很多可是简单工厂模式也并不完美,也有很多的缺点,如果通过客户端的参数来选择具体的实现类,那么就必须让客户端能理解各个参数所代表的具体功能和含义,这会增加客户端使用的难度,也部分暴露了内部实现.并且不方便扩展子工厂.

  

总结

 (1)简单工厂模式是专门定义一个类来创建其他类的实例,被创建的实例通常都有公共的父类。

 (2)简单工厂模式又称为静态工厂方法,属于类的创建型模式,通常他根据自变量的不同返回不同类的实例。

 (3)实质:由一个工厂类根据传入的变量,动态的决定创建出哪一个产品类的实例。

 

 

 

抱歉!评论已关闭.