Effective Java读书笔记、感悟——1.创建和销毁对象

 每天看点Effective Java,挺好的,至今觉着Java小菜,多学基础知识,喜欢因为做喜欢的事忘记时间的感觉。

不多吐槽了。直奔主题,这里只是笔记和一些感触,选取了一些我熟悉的类和方法举个例子,因为很久了做Android比较多,我可能会选择一些Android的类库说明android相关的设计理念,对于常用到的就不再举例,一时想不到有些,也不必要非要找出实例,自己做时候注意就好了。如果细致了解建议看原文,原文中提到了一些例子,除了很重要的、以前忽略的这里都不再重复。


一:考虑静态工厂方法代替构造器
->静态工厂方法,不全同设计模式中的工厂模式。
->静态工厂方法可以解决构造函数只能参数类型顺序不同的问题, 比如可以两组相同的序列可以用方法名表示不同的含义。
->可以返回子类型,类似工厂模式了。到这里可以屏蔽子类,如针对不同参数返回不同子类优化性能, 如果后来发展无法满足需求了,大可增加或删除子类,而构造方法不行。
->对于 编码阶段禁忌第一反应是构造方法
->静态工厂方法 缺点,无可继承构造方法时无法子类化,还有在java doc中和其他方法没有区别,而构造方法会单独列出。

二:遇到多个构造器参数时考虑用构造器
->构建器builder。这里很有代表性的就是Android中Dialog的Builder,详见API,提供了先传入参数后构造Dialog的方法。
->多个参数的解决方案中:
重叠构造器包含了用户不期望的默认值。Java bean非线程安全,可能处于不一致状态,且阻止了把 类做成不可变的可能。
->构建器使用抽象工厂解决了两者,且可以在对象域(解释下,产生对象的方法)进行约束检查,违反抛出illegalstateexception,或在每个setter进行。
->Java中传统的抽象工厂实现是Class对象,用newInstance方法充当build方法的一部分,这种用法隐含着许多问题。 因为newInstance方法总是企图调用类的无参数构造器,这个构造器甚至可能根本不存在。如果类没有可以访问的无参构造器不会出现编译错误,但是client code中必须catchInstantiationException or IllegalAccessException和一切因无参数构造器带来的问题,即使无throws子句。Class newInstantce破坏了编译时的异常检查,而Builder可以弥补。
->缺点:需要多建立一个构造器,代码显得冗长,一般用于多余4个参数调用,但如果你将来有添加参数的可能,那么请用构造器,因为同时存在这些就比较不协调了,对于API的设计来讲是非常不合理的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值