1、静态工厂方法与构造器不同
优势:
1.1、有名称
1.2、不必在每次调用它们的时候都创建一个新对象
1.3、可以返回原返回类型的任何子类型的对象
1.4、所返回的对象的类可以随着每次调用而发生变化,这取决于静态工厂方法的参数值
1.5、方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不存在
缺点:
1.1、类如果不含共有的或者受保护的构造器,就不能被子类化
1.2、程序员很难发现他们
2、依赖注入
2.1、当创建一个新的实例时,就将该资源传到构造器中。
2.1、不要使用Singleton和静态工具类来实现依赖一个或多个底层资源的类,且该资源的行为会影响到该类的行为,也不要直接用这个类来创建这些资源。而应该将这些资源或者工厂传给构造器(或者静态工厂,或者构造器),通过它们来创建类。这个实践就被称为依赖注入,极大地提升了类的灵活性、可重用性和可测试性。
3、使用String.matchs 会创建一个pattern 会损耗性能,最好先创建一个private static final Pattern xxx;]
4、覆盖equals通用约定(都是非null的x)
4.1、自反性,对于任何非null的引用值,x.equals(x)返回true
4.2、对称性,当且仅当y.equals(x)为true, x.equals(y)也必须true
4.3、传递性,如果x.equals(y)和x.equals(z)为true则y.equals(z)为true
4.4、一致性,只要equals的比较操作在对象中所用的信息没有被修改,多次调用结果相同
4.5、非空性,x.equals(null)返回false
5、clone拷贝最好用构造器或者工厂提供,除了数组最好利用clone
6、接口应该只被用来定义类型,而不是用来导出常量,使用枚举或者不可实例化的工具类,
如果使用接口导出常量会把实现细节泄露到该类的导出API中,另外如果以后的实现类不再需要这些常量了,他的子类命名空间也会被接口中的常量污染。
JavaEffective知识Part01
最新推荐文章于 2024-04-27 16:09:26 发布