一、什么是工厂方法模式
工厂二字想必大家都不陌生,工厂就是用来建造东西的,我们市面上买的东西比如水杯、玩具、汽车等等都是从工厂生产的,那我们需不需要知道它们是如何生产出来的呢?当然不需要,商家从工厂中直接提货,我们就可以购买了,完全不知道它是如何生产的,这就是工厂方法模式。
工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法模式使一个类的实例化延迟到其子类。UML结构图如下:
其中,Product定义工厂方法所创建的对象的接口;Creator声明工厂方法,并返回一个Product类型的对象;ConcreteProduct是具体的产品,实现了Product接口;ConcreteCreteCreator重定义工厂方法,返回一个ConcreteProduct实例。
1、Product类
下述代码是一个抽象产品类,具体的产品类可以有多个,都继承于抽象产品类。
public abstract class Product {
//产品类的公共方法
public void method1() {
//业务逻辑处理
}
//抽象方法
public abstract void method2();
}
2、ConcreteProduct类
具体产品类,可创建多个。
public class ConcreteProduct1 extends Product {
@Override
public void method2() {
// 业务逻辑处理
}
}
3、Creator类
下述代码是一个抽象工厂类,主要负责定义产品对象的产生。
public abstract class Creator {
//创建一个产品对象,参数自行设置
public abstract <T extends Product> T createProduct(Class<T> c);
}
4、ConcreteCreator类
具体如何产生一个产品的对象,是由具体的工厂类实现的。
public class ConcreteCreator extends Creator {
@Override
public <T extends Product> T createProduct(Class<T> c) {
Product product = null;
try {
product = (Product) Class.forName(c.getName()).newInstance();
} catch (Exception e) {
// TODO: handle exception
}
return (T) product;
}
}
调用时就可以使用我们创建的工厂来完成相应的操作了,如下:
Creator creator = new ConcreteCreator();
creator.createProduct(ConcreteProduct1.class);