这两天在看《大话设计模式》,这本书很有意思,容易让人理解,但是看久了,设计模式种类看多了,也会容易混,容易记不清楚,所以我们应该过一段时间停下脚步,总结一下。帮助我们理解,记忆。------常常驻足进行总结,颗粒归仓才是我们的收获。
最近看到了简单工厂模式和工厂方法模式,从名字上看这么的相似,越相似月不容易找到他们的区别,今天就来介绍他们的区别。
简单工程模式:它的工厂类一般使用静态方法,通过接收的参数的不同来返回不同的对象实例,不修改代码的话,是无法扩展的。最大的有点就是工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说除去了具体产品的依赖。看它的结构图:
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。在同一等级结构中支持增加任意产品。下面是它的结构图:
通过实例来看他们的区别:
//简单工厂类 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(); } }
简单工厂中工厂类中包含了必要的逻辑判断,如果想要增加新的产品(比如教师志愿者)就要修改代码去进行添加才能实现,这样就大大违背了开放-封闭原则,不利于扩展。而工厂方法模式克服了这一缺点,如果想要在增加一个产品直接再增加一个产品工厂类就行了,有利于扩展,不影响其他的类。
区别总结:
简单工厂模式:用来生产同一等级结构中的任意产品,但是对于增加新的产品无能为力(不利于扩展)。不会增加额外的开发量,适合于中小型项目。
工厂方法模式:用来生产同一登记结构中的固定产品,支持增加新的产品,有利于扩展。由于每增加一个产品增加了额外的开发量,适合于大型项目。