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

来源:互联网 发布:大数据总监 编辑:程序博客网 时间:2024/05/22 13:16

 每天看点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的设计来讲是非常不合理的。
原创粉丝点击