什么是工厂方法模式?
Define an interface for creating an object, but let subclasses decide which to instantiate. Factory Method lets a class defer instantiation to subclasses.
(定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类)
如何使用工厂方法模式?
工厂方法模式UML图如下
抽象产品类Product负责定义产品的共性,实现对事物的最抽象的定义;Creator为抽象创建类,也就是抽象工厂,具体如何创建由实现工厂ConcreteCreator完成。
使用工厂方法模式有什么好处?
工厂方法模式是典型的解耦框架,符合迪米特法则,里氏替换法则,符合依赖倒置法则。调用者只需要知道工厂方法的接口而不需要知道具体如何实现。例如使用JDBC连接数据库时,数据库从MySQL切换到Oracle时只需要改动驱动名称。
工厂方法模式的应用
延迟初始化。一个对象被消费完毕后并不会立即销毁而是将他保留等待再次利用。
示例如下
/**
* 工厂方法模式的延迟初始化应用
*/
public class LazyInitialFactory {
// 用作缓存
private static final Map<String, Product> prMap = new HashMap<>();
public static synchronized Product createProduct(String type) throws Exception{
Product product = null;
if (prMap.containsKey(type)){
product = prMap.get(type);
}else {
if (type.equals("product1")){
product = new ConcreteProduct1();
}else {
product = new ConcreteProduct2();
}
}
return product;
}
}
interface Product{
}
class ConcreteProduct1 implements Product{
}
class ConcreteProduct2 implements Product{
}
例子:JDBC连接数据库都会设置一个MaxConnections最大连接数量,即最大实例化数量。