如何获得一个类的实例
为了获得一个类的实例对象,我们在开发过程中一般通过两种方式:
- 通过类的构造方法,
new
出一个对象。
class Person {
private name;
public Person(String name) {
this.name = name;
}
}
//调用构造方法获得实例
Person man = new Person("Jimmy");
- 类提供一个公有静态方法,通过这个方法返回该类的一个对象。
class Person {
private name;
public Person(String name) {
this.name = name;
}
public static createPersonWithName(String name) {
Person instance = new Person(name);
return instance;
}
}
//调用静态工厂方法获得实例
Person man = Person.createPersonWithName("Jimmy");
两者的区别在哪里?
静态工厂方法可以自定义方法名。对比构造器的名称只能是类的名字,静态工厂方法的区分度更好。如上面例子中的 Person, 我们可以定义一个名称为
createPersonWithName(String name)
的方法来引导用户使用'name'来创建一个实例。不必每次调用都创建对象。我们可以根据需要,返回一个自己需要的对象,这个对象可以多次复用或者是一个单例,反之,直接调用构造器会强制创建一个对象。
可以返回子类对象。对于某些不想公开构造方法或者类的细节的对象,可以利用这个特性达到目的。如 Collection Framework 里面的静态工厂,能不暴露具体的子类的条件下,返回子类的对象,客户端对此是透明的。
静态工厂通常比构造器更加适合创建对象,我们应该优先考虑静态工厂。