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
1700457853
设计模式之禅 8.5 最佳实践
1700457854
1700457855
工厂方法模式在项目中使用得非常频繁,以至于很多代码中都包含工厂方法模式。该模式几乎尽人皆知,但不是每个人都能用得好。熟能生巧,熟练掌握该模式,多思考工厂方法如何应用,而且工厂方法模式还可以与其他模式混合使用(例如模板方法模式、单例模式、原型模式等),变化出无穷的优秀设计,这也正是软件设计和开发的乐趣所在。
1700457856
1700457857
1700457858
1700457859
[
上一页 ]
[ :1.70045781e+09 ]
[
下一页 ]