简单工厂 vs 工厂方法

      设计模式,厂三姐妹是很重要的。现在,让我们来谈谈他们的故事。

 


简单工厂模式:

                        

          client的实现须要依靠的是父类和工厂这个类,所以就把子类封装在父类里面,client直接调用父类和工厂类就能够了。可是工厂类还须要依赖于父类。我们如果父类为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;
        }
    }

         在client中。我们须要做的就是利用调用工厂类和父类中的方法:

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

         显示结果为:大鸟在飞。

         简单工厂模式中在工厂类中包括了必要的逻辑推断,依据client的选择条件动态的实例化相关的类。对于client来说,去除了与详细产品的依赖。


工厂方法模式:

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

                    

         由图可知。工厂类的子类有俩个,父类也是有俩个的,也就是bird中俩个子类各自是littlebird和bigbird。上面的代码已经给出,这里不再反复。可是这里还须要写工厂类和他的工厂的子类们,还有client中的代码。详细例如以下:

         构建一个 工厂的接口:

 interface IFactory
    {
        Bird CreateBird();
    }

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

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

         最后在client的实现中写:

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


        }
    }

       就这样,简单模式通过了抽象接口和详细的子抽象详细的接口,实现了工厂方法模式。工厂方法把简单工厂的内部逻辑推断移到了client代码来进行啦。


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

      





                          


             

版权声明:本文博客原创文章,博客,未经同意,不得转载。

原文地址:https://www.cnblogs.com/gcczhongduan/p/4718574.html