简单工厂模式有个问题是,类的创建是需要依赖工厂类的,如果要拓展程序,那么需要对工厂类进行修改,这个增加了风险。
工厂方法模式可以避免这种情况,方法创建一个工厂接口和创建多个工厂类,理解如下:对了抽象方法a,b和c分别为其的两个不同实现,现在创建工厂接口d,工厂接口d的实列类e和f分别对b和c进行实列化,则若第三方要调用b或c,则直接调用e或f就可以。与此同时,如果抽象方法a又需要增加一种新的实现方法g,则再新建一个新的工厂接口d的实例方法f,则只会新加代码,而不会改动之前的代码。
例如:
抽象方法a:send
public interface testInterface {
public void send();
}
抽象方法a的实现方法b:test2.send
c:test3.send
public class test2 implements testInterface {
public void send() {
System.out.println("this is test2");
}
}
public class test3 implements testInterface{
public void send(){
System.out.println("this is test3");
}
}
抽象工厂方法d:produce
public interface FactoryInterface {
public testInterface produce();
}
抽象工厂方法实现e:FactoryTest .produce
f:FactoryTest2 .produce
public class FactoryTest implements FactoryInterface {
public testInterface produce(){
return new test2();
}
}
public class FactoryTest2 implements FactoryInterface {
public testInterface produce(){
return new test3();
}
}
第三方调用案例:
public class testmain {
public static void main(String[] args){
FactoryInterface factoryInterface=new FactoryTest();
//运行test2的send方法
testInterface test=factoryInterface.produce();
test.send();
FactoryInterface factoryInterfacef=new FactoryTest2();
//运行test3的send方法
testInterface testf=factoryInterfacef.produce();
testf.send();
}
}