第1条:用静态方法代替构造器

静态工厂方法的优势

  • 静态工厂方法与构造器不同的第一大优势在于,它们有名称。
  • 静态工厂方法与构造器不同的第二大优势在于,不必在每次调用天它们的时候都创建一个新对象。
  • 静态工厂方法与构造器不同的第三大优势在于 ,它们可以返回原返回类型的任何子类型的对象。
  • 静态工厂方法的第四大优势在于,所返回的对象的类可以随着每次调用而发生变化,这取决于静态工厂方法的参数值。
  • 静态工厂方法的第五大优势在于,方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不存在。

静态工厂方法的劣势

  • 静态工厂方法的主要缺点在于,类如果不包含公有的或受保护的构造器,就不能被子类化。
  • 静态工厂方法的第二个缺点在于,程序员很难发现它们。
# from---类型转换方法,它只有单个参数,返回该类型的一个相对应的实例,例如:
	Date  d = Date.from(instant);
	
# of---聚合方法,带有多个参数,返回该类型的一个实例,把它们合并起来,例如:
	Set<Rank> faceCards = EnumSet.of(JACK, QUEEN, KING);
	
# valueOf---比from和of更繁琐的一种替代方法,例如:
	BigInteger prime  = BigInteger.valueOf(Integer.MAX_VALUE);
	
# instance或者getInstance---返回的实例是通过方法的(如有)参数来描述的,但是不能说与参数具有同样的值,例如:
	StackWalker luke = StackWalker.getInstance(options);
	
# create或者newInstance---像instance或者getInstance一样,但create或者newInstance能够确保每次调用都返回一个新的实例,例如:
	Object newArray = Array.newInstance(classObject, arrayLen);

# getType---像getInstance一样,但是在工厂方法处于不同的类中的时候使用。Type表示工厂方法所返回的对象类型,例如:
	FileStore fs = Files.getFileStore(path);

# newType---像newInstance一样,但是在工厂方法处于不同的类中的时候使用。Type表示工厂方法所返回的对象类型,例如:
	BufferedReader br = Files.newBufferedReader(path);

type---getType和newType的简版,例如:
	List<Complaint> litany = Collections.list(legacyLitany);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值