class只有两种访问权限(内部类除外):package access和public。如果不想其他任何人对该类拥有访问权限,可以把所有构造方法指定为private,阻止其创建该类的对象。但有一个例外,就是可以在该类的static成员内部创建对象。
class Soup1{
private Soup1() {}
public static Soup1 makeSoup(){
return new Soup1();
}
}
class Soup2{
private Soup2(){}
//Singleton pattern
private static Soup2 ps1=new Soup2();
public static Soup2 access(){
return ps1;
}
public void f(){}
}
public class Lunch {
void testPrivate(){
//cant't do this
// ! Soup1 soup=new Soup1();
}
void testStatic(){
Soup1 soup=Soup1.makeSoup();
}
void testSinleton(){
Soup2.access().f();
}
}
Soup1和Soup2两个类通过把构造方法设置为private来阻止直接创建类的实例。那么如何使用这些类呢。本例给出
了两种方式。
在Soup1中,创建了一个static方法,它创建了一个新的Soup1对象并返回一个对它的引用。Soup2用到了单例模式,始终只能创建它的一个对象;Soup2类的对象是作为Soup2的一个static private成员而创建的,所以有且只有一个(单例),除非是通过public方法access(),否则是无法访问到它的。
本文探讨了Java中如何通过将构造方法设为私有来阻止类的实例化,并介绍了两种使用方法:通过静态工厂方法创建对象和利用单例模式确保类仅有一个实例。
1533

被折叠的 条评论
为什么被折叠?



