打字猴:1.70045779e+09
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 ]  [ 下一页 ]