package com.cheng.zenofdesignpatterns.patterns.factorymethod.lazyinitialization;
import com.cheng.zenofdesignpatterns.patterns.factorymethod.common.ConcreteProduct1;
import com.cheng.zenofdesignpatterns.patterns.factorymethod.common.ConcreteProduct2;
import com.cheng.zenofdesignpatterns.patterns.factorymethod.common.Product;
import java.util.HashMap;
import java.util.Map;
/**
* 延迟加载的工具类
*/
public class LazyProductFactory {
private static final Map<String, Product> prMap = new HashMap<>();
public static synchronized Product createProduct(String type) {
Product product = null;
// 如果Map中已经有这个对象
if (prMap.containsKey(type)) {
product = prMap.get(type);
} else {
if (type.equals("Product1")) {
product = new ConcreteProduct1();
} else {
product = new ConcreteProduct2();
}
// 同时把对象放到缓存容器中
prMap.put(type, product);
}
return product;
}
/**
* 延迟加载框架是可以扩展的,例如限制某一个产品类的最大实例化数量,可以通过判断Map中
* 已有的对象数量来实现,这样的处理是非常有意义的,例如JDBC连接数据库,都会要求设置
* 一个MaxConnections最大连接数量,该数量就是内存中最大实例化的数量。
* 延迟加载还可以用在对象初始化比较复杂的情况下,例如硬件访问,涉及多方面的交互,则
* 可以通过延迟加载降低对象的产生和销毁带来的复杂性。
*/
}