简单工厂 vs 工厂方法

来源:互联网 发布:linux oracle sqlplus 编辑:程序博客网 时间:2024/06/03 17:07

      设计模式中,工厂三姐妹还是比较重要的,现在我们来谈谈他们的故事。 


简单工厂模式:

                        

          客户端的实现需要依靠的是父类和工厂这个类,所以就把子类封装在父类里面,客户端直接调用父类和工厂类就可以了;但是工厂类还需要依赖于父类。我们假设父类为bird,子类分别为little bird和 big bird,而父类代码和子类的代码分别如下:

public abstract class Bird    {     public abstract void Fly();    }    public class LittleBird : Bird    {        public override void Fly()        {            Console.WriteLine("小鸟在飞");        }    }    public class BigBird : Bird    {        public override void Fly()        {            Console.WriteLine("大鸟在飞");        }    }

         同时我们需要写工厂类:

public class Factory    {        public static Bird CreateBird(string BirdType)        {            Bird bird = null;            switch (BirdType)            {                 case "LittleBird":                    bird = new LittleBird();                    break;                case "BigBird":                    bird = new BigBird();                    break;            }            return bird;        }    }

         在客户端中,我们需要做的就是利用调用工厂类和父类中的方法:

 class Program    {        static void Main(string[] args)        {            Bird bird = Factory.CreateBird("BigBird");            bird.Fly();        }    }

         显示结果为:大鸟在飞。

         简单工厂模式中在工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态的实例化相关的类,对于客户端来说,去除了与具体产品的依赖。


工厂方法模式:

           定义一个用于创建对象的接口,让子类决定实例化那一个类,工厂方法使一个类的实例化延迟到其子类。

                    

         由图可知,工厂类的子类有俩个,父类也是有俩个的,也就是bird中俩个子类分别是littlebird和bigbird,上面的代码已经给出,这里不再重复。但是这里还需要写工厂类和他的工厂的子类们,还有客户端中的代码,具体如下:

         构建一个 工厂的接口:

 interface IFactory    {        Bird CreateBird();    }

        然后就可以写工厂的子类啦,去实现这个接口。

class LittleFactory : IFactory    {        public Bird CreateBird()        {            return new LittleBird();        }      }    class BigFactory : IFactory    {        public Bird CreateBird()        {            return new BigBird();         }    }   

         最后在客户端的实现中写:

class Program    {        static void Main(string[] args)        {            IFactory a = new LittleFactory();            Bird LittleBird = a.CreateBird();            a.CreateBird();        }    }

       就这样,简单模式通过了抽象接口和具体的子抽象具体的接口,实现了工厂方法模式。工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行啦。


        自己管理自己的工厂就是简单工厂,而通过一个工厂的抽象接口来管理,就是工厂方法。下篇将介绍抽象工厂。刚刚学习,认识肤浅,还望指教。

      





                          


             

0 0