第1条:考虑用静态工厂方法代替构造器

一、对类而言,获取自身一个实例的方法:

  • 通过公有的构造器
  • 通过类提供的公有的静态工厂方法

二、静态工厂方法对比构造器的优势:

  • 它们有名称
  • 不必在每次调用他们得时候都创建一个新对象
  • 它们可以返回原返回类型的任何子类型的对象——例如:Java Collection Framework、java.util.EnumSet、JDBC API
    1. 服务提供者框架中三个重要的组件:服务接口、提供者注册API、服务访问API
  • 在创建参数化类型实例的时候,它们使代码变得更加简洁——例如:
//  构造器创建实例
    Map<String, List<String>> map = new HashMap<String,  List<String>>();
//    静态工厂方法
    public static <K, V> HashMap<K, V> newInstance() {
        return new HashMap<K, V>();
    }
//  静态工厂方法创建实例
    Map<String, List<String>> map = HashMap.newInstance();

三、静态工厂方法的缺点:

  • 类如果不含公有的或者受保护的构造器,就不能被子类化
  • 它们与其他的静态方法实际上没有任何区别

四、静态工厂方法的一些惯用名称:

  • valueOf——不太严格地讲,该方法返回的实例与它的参数具有相同的值。这样的静态工厂方法实际上是类型转换方法。
  • of——valueOf的一种更为简洁的替代,在EnumSet中使用并流行起来。
  • getInstance——返回的实例是通过方法的参数来描述的,但是不能够说与参数具有同样的值。对于Singleton来说,该方法没有参数,并返回唯一的实例。
  • newInstance——像getInstance一样,但newInstance能够确保返回的每个实例都与所有其他实例不同。
  • getType——像getInstance一样,但是在工厂方法处于不同的类中的时候使用。Type表示工厂方法所返回的对象类型。
  • newType——像newInstance一样,但是在工厂方法处于不同的类中的时候使用。Type表示工厂方法所返回的对象类型。

注:待完善.......

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值