静态与动态工厂

实例

/**
 * 静态工厂
 * @date 2020.04.01
 */
public class ExternalBeanStaticFactory {
    private static OkHttpClient OkHttpClient;
    public static OkHttpClient getInstance() {
        if (OkHttpClient == null) {
            OkHttpClient = new OkHttpClient.Builder().build();
        }
        return OkHttpClient;
    }
}
/**
 * 动态工厂
 * @author cxy
 * @date 2020.04.01
 */
public class ExternalBeanFactory {
    private OkHttpClient OkHttpClient;
    public OkHttpClient getInstance() {
        if (OkHttpClient == null) {
            OkHttpClient = new OkHttpClient.Builder().build();
        }
        return OkHttpClient;
    }
}
<!-- 静态工厂 -->
<bean class="net.web.ExternalBeanStaticFactory" factory-method="getInstance" id="okHttpClientStatic"></bean>

<!-- 动态工厂 -->
<bean class="net.web.ExternalBeanFactory" id="ExternalBeanFactory"/>
<bean class="okhttp3.OkHttpClient" factory-bean="ExternalBeanFactory" factory-method="getInstance" id="okHttpClient"></bean>

可以看到,静态工厂的方法多了 static 关键字,而动态工厂就对了个bean 配置,看到这里我们来总结一下:

  • 逻辑代码和配置方式的区别(这也是CSDN看到最多的关于这两者的解释)
  • 动态工厂需要更多的内存(达到一定的并发)
原文地址:https://www.cnblogs.com/QianYue111/p/13607790.html