Effective-Java-ch-1考虑使用静态工厂方法代替构造器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25859403/article/details/82348390

相关概念

静态工厂方法:就是返回当前类的实例的静态方法。
特点: 1.public static 修饰;2.返回值为当前类的对象。

举例:

//String类中的静态工厂方法:
public static String valueOf(boolean value) {
        return value ? "true" : "false";
 }

//Boolean类中的静态工厂方法:
public static Boolean valueOf(boolean b) {
        return b ? Boolean.TRUE : Boolean.FALSE;
 }

静态工厂方法较与构造器的优势

1.静态工厂方法有名称,构造器没有

2.静态工厂方法不必在每次调用方法的时候,创建新对象

3.静态工厂方法可以返回原返回类型的任何子类型的对象

/**
 * 服务 接口
 */
public interface Service {

}
/**
 * 提供服务 接口
 */
public interface Provider {
    Service newService();
}


public class Services {
    /**
     * 构造器 私有
     */
    private Services() {
    }


    private static final Map<String, Provider> providers = new HashMap<>();


    public static final String DEFAULT_PROVIDER_NAME = "<def>";


    public static void registerDefaultProvider(Provider provider) {
        registerProvider(DEFAULT_PROVIDER_NAME, provider);
    }


    public static void registerProvider(String name, Provider provider) {
        providers.put(name, provider);
    }


    public static Service newInstance() {
        return newInstance(DEFAULT_PROVIDER_NAME);
    }

    public static Service newInstance(String name) {
        Provider provider = providers.get(name);

        if (provider == null) throw new IllegalArgumentException("No provider registered with name:" + name);

        return provider.newService();
    }
}

4.静态工厂方法在创建参数化类型实例的时候,代码更加简洁


静态工厂方法的缺点

1. 类如果不含有公有的(public)或者受保护的(protected)构造器,就不能被子类实例化

猜你喜欢

转载自blog.csdn.net/qq_25859403/article/details/82348390
今日推荐