今天在看《java编程思想》的访问权限控制一章中,里面讲到private关键字,一个单例模式,原来看过这种写法,但是一直不明白其中的道理,看过之后就明白了。
下面是这个栗子
public class Single {
//在对象加载的时候只进行一次
private static Single single = new Single();
private Single() {}
public static Single getSingle(){
return single;
}
}
构造方法被private关键字修饰,外界访问不到构造方法,只能通过getSingle方法获得
所以只会返回一个实例。
for (int i = 0; i < 5; i++) {
System.out.println(Single.getSingle());
}
可以看到,创建只会返回一个实例。这种加载方式也叫饿汉加载模式。为什么叫饿汉模式呢,因为类在初始化的时候就会实例化自己,而不是在需要的时候才回去加载,下面可以比较一下懒汉模式。
另外补充一点的是,由于类在加载的时候就已经初始化,所以不会有多线程问题。(多线程问题,暂时还未理解透彻,不敢多说)
懒汉模式:
public class LazySingle {
private static LazySingle lazySingle = null;
private LazySingle(){
}
public synchronized static LazySingle getInstance(){ //线程不安全,加锁
if (lazySingle == null) {
lazySingle = new LazySingle();
}
return lazySingle;
}
for (int i = 0; i < 5; i++) {
System.out.println(LazySingle.getInstance());
}
只会返回一个实例
所以有些书被称为经典还是有一定的道理,人丑就要多读书!!!!哈哈