技术开发 频道

SCA软件架构设计理念分析

    Factory调用及代理模式实现的延迟加载功能

    下面来看调用是多么简单,providerFactories就是我们图示的HashMap,下面的implementationProvider是那个延迟加载的类LazyImplementationProviderFactor的对象:

    ImplementationProviderFactory
    providerFactory   =   (ImplementationProviderFactory)

    providerFactories.getProviderFactory(implementation.getClass());

    ImplementationProvider
    implementationProvider  =   providerFactory.createImplementationProvider

    (component, implementation);


    LazyImplementationProviderFactor调用createImplementationProvider方法如下,其中getFactory()是要加载该延迟加载类封装的实际的的ProviderFactor。

    public ImplementationProvider createImplementationProvider(RuntimeComponent component,
    Implementation Implementation) {
    return getFactory().createImplementationProvider(component, Implementation);
    }


    另外除了延迟加载的原理,还存在代理模式的应用,如下图所示,这儿调用的是LazyImplementationProvicerFactory,然后通过它来调用实际的ImplementationProvicerFactory的实现类来创建ImplementationProvider。

    且看它这时才加载( ImplementationProviderFactory getFactory() ),这正是延迟加载的含义。   

if (factory == null) {
    
try {
    ClassLoader classLoader
= ImplementationProviderFactory.class.getClassLoader();
    Class
<ImplementationProviderFactory> factoryClass =
    (Class
<ImplementationProviderFactory>)Class.forName(className, true, classLoader);
    Constructor
<ImplementationProviderFactory> constructor =
    factoryClass.getConstructor(ExtensionPointRegistry.
class);
    factory
= constructor.newInstance(registry);
    }
catch (Exception e) {
    
throw new IllegalStateException(e);
    }
    }
    
return factory;
0
相关文章