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

本文探讨了静态工厂方法在Java编程中的应用。相对于构造器,静态工厂方法提供了命名灵活性,能够避免每次调用时创建新对象,还能返回类的任何子类型对象,简化参数化类型实例的创建。然而,它也限制了类的子类化,因为无公共或受保护的构造器可用。
摘要由CSDN通过智能技术生成
相关概念

静态工厂方法:就是返回当前类的实例的静态方法。
特点: 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)构造器,就不能被子类实例化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值