简单工厂模式VS工厂方法模式

        这两天在看《大话设计模式》,这本书很有意思,容易让人理解,但是看久了,设计模式种类看多了,也会容易混,容易记不清楚,所以我们应该过一段时间停下脚步,总结一下。帮助我们理解,记忆。------常常驻足进行总结,颗粒归仓才是我们的收获。

        最近看到了简单工厂模式和工厂方法模式,从名字上看这么的相似,越相似月不容易找到他们的区别,今天就来介绍他们的区别。

        简单工程模式:它的工厂类一般使用静态方法,通过接收的参数的不同来返回不同的对象实例,不修改代码的话,是无法扩展的。最大的有点就是工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说除去了具体产品的依赖。看它的结构图:

        简单工厂模式VS工厂方法模式_第1张图片

         工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。在同一等级结构中支持增加任意产品。下面是它的结构图:

        简单工厂模式VS工厂方法模式_第2张图片

        通过实例来看他们的区别:

    //简单工厂类
    class SimpleFactary
    {
        public static leifeng CreateLeiFeng(string type)
        {
            leifeng result = null;
            switch (type )
            {
                case "学雷锋的大学生":
                    result = new Undergraduate();
                    Console.WriteLine("学雷锋的大学生");
                    break;
                case "社区志愿者":
                    result = new Volunteer();
                    Console.WriteLine("社区志愿者");
                    break;
            }
            return result;
        }
     }
       工厂方法模式:
    //雷锋工厂
    interface IFactory
    {
        leifeng CreateLeiFeng();
    }
    //学雷锋的大学生工厂
    class UndergraduateFactory:IFactory 
    {
        public leifeng CreateLeiFeng()
        {
            Console.WriteLine("学雷锋的大学生");
            return new Undergraduate();

        }
    }
    //社区志愿工厂
    class VolunteerFactory:IFactory 
    {
        public leifeng CreateLeiFeng()
        {
            Console.WriteLine("学雷锋的大学生");
            return new Volunteer();
           
        }
    }

        简单工厂中工厂类中包含了必要的逻辑判断,如果想要增加新的产品(比如教师志愿者)就要修改代码去进行添加才能实现,这样就大大违背了开放-封闭原则,不利于扩展。而工厂方法模式克服了这一缺点,如果想要在增加一个产品直接再增加一个产品工厂类就行了,有利于扩展,不影响其他的类。

        区别总结:

        简单工厂模式:用来生产同一等级结构中的任意产品,但是对于增加新的产品无能为力(不利于扩展)。不会增加额外的开发量,适合于中小型项目。

        工厂方法模式:用来生产同一登记结构中的固定产品,支持增加新的产品,有利于扩展。由于每增加一个产品增加了额外的开发量,适合于大型项目。





            

你可能感兴趣的:(设计模式)