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