跟简单工厂模式一样同属于创建型模式,还被称为多态工厂模式。
工厂方法模式大致跟简单工厂模式差不多,具体不同表现在工厂方面,可以这样讲,工厂方法模式就是将工厂详细的分类了,抽象出一个工厂然后实现跟具体工厂里面生产的品牌有关,这样设计有什么好处呢,让我们来看下面的例子:
同样以简单工厂的那个例子:
我们有电视,具体品牌有长虹电视,创维电视,这里的工厂跟简单工厂不同的是具体分类了,有工厂,具体实现是长虹电视工厂,创维电视工厂
电视:
public interface TV {
public String getName();
}
长虹电视:
public class ChangHongTV implements TV{
@Override
public String getName() {
// TODO Auto-generated method stub
return "长虹电视";
}
}
创维电视:
public class ChuangWeiTV implements TV{
@Override
public String getName() {
// TODO Auto-generated method stub
return "创维电视";
}
}
电视工厂:
public interface TVFactory {
public TV getTV();
}
长虹电视工厂:
public class ChangHongTVFactory implements TVFactory{
@Override
public TV getTV() {
return new ChangHongTV();
}
}
创维电视工厂:
public class ChuangWeiTVFactory implements TVFactory{
@Override
public TV getTV() {
return new ChuangWeiTV();
}
}
跟简单工厂有什么不同呢?
那么假如客户需要一个长虹电视的话我们可以直接找到生产长虹电视的工厂,拿出长虹电视,需要创维也一样,那么假如又多了一个品牌怎么办呢?如果在简单工厂中我们需要改变工厂的源代码,那样明显违背了OCP原则(开闭原则),如果是在工厂方法模式中就不会出现这样的问题啦,我们只需要再加一个新品牌的工厂,实现公有的工厂接口,那么就可以达到目地了,这样正符合了OCP原则,工厂方法模式是对简单工厂的一种进化