简单工厂模式和工厂方法模式都是实例化对象的模式(或方法)。
区别:
简单工厂模式主要是由工厂对象(确切说是传入工厂类方法的参数)决定实例化哪种对象。如下面代码中的type参数。
public class SampleFactor {
public LeiFeng CreateLeiFeng(string type){
LeiFeng leifeng = null;
switch (type){
case: "学雷锋" :
leifeng = new Undergraduate();
break;
case: "社区志愿者":
leifeng = new Volunteer();
break;
}
return leifeng;
}
}
客户端调用如下:
SampleFactor samplefactor = new SampleFactor();
LeiFeng res = samplefactor.CreateLeiFeng("学雷锋");
工厂方法模式是定义一个工厂接口,让子类决定实例化哪个类。如下:
public interface IFactor{
LeiFeng CreateLeiFeng();
}
public UnderGraduate implements IFactor{
LeiFeng CreateLeiFeng(){
return new Undergraduate();
}
}
public VolunteerFactor implements IFactor{
LeiFeng CreateLeiFeng(){
return new Volunteer();
}
}
客户端调用如下:
IFactor ifactor = new UnderGraduate();//可以换成VolunteerFactor
ifactor.CreateLeiFeng();
工厂方法模式相比简单工厂模式的好处:在保证了集中封装了对象创建的基础上,克服了简单工厂模式违背开放-封闭原则的缺点。因为如果新加入别的子类,后者需要在工厂类中添加case,而前者仅需要扩展,即创建该子类并实现ifactor接口。