打字猴:1.700457802e+09
1700457802
1700457803 代码清单8-22 延迟加载的工厂类
1700457804
1700457805 public class ProductFactory{
1700457806
1700457807 private static final Map<String,Product>prMap=new HashMap();
1700457808
1700457809 public static synchronized Product createProduct(String type)throws Exception{
1700457810
1700457811 Product product=null;
1700457812
1700457813 //如果Map中已经有这个对象
1700457814
1700457815 if(prMap.containsKey(type)){
1700457816
1700457817 product=prMap.get(type);
1700457818
1700457819 }else{
1700457820
1700457821 if(type.equals(“Product1”)){
1700457822
1700457823 product=new ConcreteProduct1();
1700457824
1700457825 }else{
1700457826
1700457827 product=new ConcreteProduct2();
1700457828
1700457829 }
1700457830
1700457831 //同时把对象放到缓存容器中
1700457832
1700457833 prMap.put(type,product);
1700457834
1700457835 }
1700457836
1700457837 return product;
1700457838
1700457839 }
1700457840
1700457841 }
1700457842
1700457843 代码还比较简单,通过定义一个Map容器,容纳所有产生的对象,如果在Map容器中已经有的对象,则直接取出返回;如果没有,则根据需要的类型产生一个对象并放入到Map容器中,以方便下次调用。
1700457844
1700457845 延迟加载框架是可以扩展的,例如限制某一个产品类的最大实例化数量,可以通过判断Map中已有的对象数量来实现,这样的处理是非常有意义的,例如JDBC连接数据库,都会要求设置一个MaxConnections最大连接数量,该数量就是内存中最大实例化的数量。
1700457846
1700457847 延迟加载还可以用在对象初始化比较复杂的情况下,例如硬件访问,涉及多方面的交互,则可以通过延迟加载降低对象的产生和销毁带来的复杂性。
1700457848
1700457849
1700457850
1700457851
[ 上一页 ]  [ :1.700457802e+09 ]  [ 下一页 ]