1700457790
以上通过工厂方法模式创建了一个单例对象,该框架可以继续扩展,在一个项目中可以产生一个单例构造器,所有需要产生单例的类都遵循一定的规则(构造方法是private),然后通过扩展该框架,只要输入一个类型就可以获得唯一的一个实例。
1700457791
1700457792
4.延迟初始化
1700457793
1700457794
何为延迟初始化(Lazy initialization)?一个对象被消费完毕后,并不立刻释放,工厂类保持其初始状态,等待再次被使用。延迟初始化是工厂方法模式的一个扩展应用,其通用类图如图8-6所示。
1700457795
1700457796
1700457797
1700457798
1700457799
图8-6 延迟初始化的通用类图
1700457800
1700457801
ProductFactory负责产品类对象的创建工作,并且通过prMap变量产生一个缓存,对需要再次被重用的对象保留,Product和ConcreteProduct是一个示例代码,请参考代码清单8-8和代码清单8-9。ProductFactory如代码清单8-22所示。
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
}
[
上一页 ]
[ :1.70045779e+09 ]
[
下一页 ]