创建有效的对象:
1.用静态工厂代替构造器。
静态工厂———— 静态方法。
构造器——————是一种特殊类型的方法,他与类同名,没有返回类型,和new关键字结合可以返回对象实例的引用。
优势:
1)静态工厂方法与构造器不同的第一大优势在于,它们有名称,使客服端代码更加容易被阅读,确切的描述返回值类型。
2)不必在每次调用的它们的时候都创建一个新的对象(这个完全取决于具体的实现)。
3)它们可以返回原返回类型的任何子类型的对象。
这种灵活性的一种应用:API可以返回对象,同时又不会使对象的类变成公有的。公有的静态方法所返回的对象的类不仅可以是非公有的,而且该类还可以随着每次调用而发生变化着取决于静态工厂方法的参数值,只要是已声明返回类型的子类型,都是允许的。
4)在创建参数化类型(也就是泛型,jdk1.5新特性)实例的时候,它们是的代码变得更加简洁。
缺点:
1)类如果不含有他的公有或者受保护的构造器,就不能被子类化(即被继承)。
2)它们与其他静态方法实际上没有任何区别。
常用的静态工厂名称: valueOf
, of
, getInstance
, newInstance
,g etType
, newType
.
创建对象的方法:
-
- 构造器
- 静态工厂方法
- 通过Builder
不直接生成想要的对象,而是让客户端利用所有必要的参数调用构造器,得到一个builder对象,然后客户端在builder对象上调用类似于setter的方法,来设置每个可选参数,最后在客户端调用无参的build()方法来生成对象。下面是一个简单的示例:
2 遇到多个构造器参数时考虑用构建器
当参数大于三个的时候,就可以考虑使用构建器了,特别实在参数可选的时候。
public class Person{
public Person name(String name){return this;} public Person age(String age){return this;} public Person gender(String gender){return this;} public Person tel(String tel){return this;} } //使用的时候可以这样用 (new Person()).name("xingoo").age(30).gender("male").tel(13333333333);
也可以在一个类中重载来实现。
1.重写必须继承,重载不用。
2.重写的方法名,参数数目相同,参数类型兼容,重载的方法名相同,参数类型和个数不同。
3.重写的方法修饰符大于等于父类的方法,重载和修饰符无关。
4.重写不可以抛出父类没有抛出的一般异常,可以抛出运行时异常
缺点: 使用构建器的缺点就是代码会比较冗长。
遇到许多构造器参数的时候换可以用Javabean的方式,