• 简单工厂 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代码来进行啦。


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

          





                              


                 

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

  • 相关阅读:
    20道JS原理题助你面试一臂之力!
    10实用的JS实用技巧
    10实用的JS实用技巧
    比尔盖茨的30条经典语录
    比尔盖茨的30条经典语录
    成为优秀程序员应该具备的8个特质
    成为优秀程序员应该具备的8个特质
    不懂开发的人员,请不要随意说这功能很容易实现
    不懂开发的人员,请不要随意说这功能很容易实现
    15句乔布斯经典语录(中英文)
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4718574.html
Copyright © 2020-2023  润新知