工厂方法模式(Factory Method):简单工厂模式中,通过工厂类来判断需要调用的具体实现类,隔离了用户和实际类之间的关系,降低系统间的耦合度,但是如果创建的类很多,工厂类将会很庞大,不利于维护,所以需要工厂方法模式。
工厂方法模式简单而言是将不同的职责的类分别通过不同的工厂来产生实例对象。
示例:
Product.java
public interface Product {
public String operation1();
}
Product1.java
public class Product1 implements Product {
public String operation1(){
return "Product1生产";
}
}
Product2.java
public class Product2 implements Product {
public String operation1(){
return "Product2生产";
}
}
Factorymethod.java
public interface Factorymethod {
Product factoryMethod();
}
Product1Factory .java
public class Product1Factory implements Factorymethod{
public Product factoryMethod(){
return new Product1();
}
}
Product2Factory .java
public class Product2Factory implements Factorymethod{
public Product factoryMethod(){
return new Product1();
}
}
Client.java
public class Client {
public static void main(String[] args) {
Factorymethod fm=new Product1Factory();
Product pro=fm.factoryMethod();
System.out.println(pro.operation1());
}
}
运行结果:
Product1生产
该实例跟前面的简单工厂模式类似,只是将Product1和Product2两个生产的工厂分开,并分别继承于Factorymethod。
如果新增加产品3,则需要增加Product3操作接口Product,并定义他自己的工厂生产方法。可见不会干扰到Product1和Product2的生产。
由此总结工厂方法模式实现的原理如下:
每一个产品都有一个具体的工厂来创建,把简单工厂中的庞大工厂类进行拆分一个个小工厂,每个具体的小工厂只负责单独对象的创建,职责变小。这就是工厂方法模式。