单例设计模式之“懒汉式”+“饿汉式”
单例设计模式----之“懒汉式”
(即静态变量声明时,没给它创建对象,使用时再创建)
说明:
1)“单例”的“例”是指“实例”,即“对象”(类的实例即对象),
2)单例模式是指在外部使用时,确保一个类(这个类是自己设计的)只有一个对象
设计步骤:
1.构造器私有化---这是为了避免外部使用其来创建对象
a) 谁来创建对象呢?? Java中其实是由JVM来创建的。
2.声明一个“该类(自己设计的类)私有的静态变量”
3.创建一个“该类(自己设计的类)的对外的静态的公共方法(即publicstatic)”来访问该变量,若该变量没有对象(即此变量声明时,没给它创建对象),要为其创建对象。
public classMyJvm {
private static MyJvm instance;
private MyJvm(){
}
public static MyJvm getInstance(){// doublechecking
if (null == instance) {
synchronized (MyJvm.class) {//锁定MyJvm类的字节码文件
if (null == instance) {
instance = new MyJvm();
}
}
}
return instance;
}
}
单例设计模式----之“饿汉式”
设计步骤:
1.构造器私有化---这是为了避免外部使用其来创建对象
a) 谁来创建对象呢?? Java中其实是由JVM来创建的。
2.声明一个“该类(自己设计的类)私有的静态属性” ,同时创建该对象
3.对外提供访问该属性的静态方法-----------创建一个“该类(自己设计的类)的对外的静态的公共方法(即public static)”来访问该变量。
class MyJvm2 {// 效率不高
private static MyJvm2 instance = new MyJvm2();
private MyJvm2(){
}
public static MyJvm2 getInstance(){// double checking
return instance;
}
}
/**
* “饿汉式”-------这种效率较高
* 提高效率,为何用了“内部类”就可以提高效率呢?
* 因为方法和类都是在使用的时候才加载的!!!!
* 即是说,当使用MyJvm3类时,没调用getInstance()方法就不会调用MyJvm3Holder类,
* 也就不会创建对象!!
* 这一系的反应,就会延缓加载时间,进而提高了效率!!
*/
class MyJvm3 {
public static class MyJvm3Holder{
private static MyJvm3 instance = new MyJvm3();
}
private MyJvm3(){
}
public static MyJvm3 getInstance(){// double checking
return MyJvm3Holder.instance;
}
}