单例设计模式之“懒汉式”+“饿汉式”

来源:互联网 发布:源码分享论坛 编辑:程序博客网 时间:2024/06/05 22:51

单例设计模式之“懒汉式”+“饿汉式”

单例设计模式----懒汉式

                   (即静态变量声明时,没给它创建对象,使用时再创建)

  说明:

        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();

                }

            }

        }

        returninstance;

    }

}

单例设计模式----饿汉式

设计步骤:

1.构造器私有化---这是为了避免外部使用其来创建对象

a)  谁来创建对象呢??  Java中其实是由JVM来创建的。

  2.声明一个“该类(自己设计的类)私有的静态属性” ,同时创建该对象

 3.对外提供访问该属性的静态方法-----------创建一个“该类(自己设计的类)的对外的静态的公共方法(即public static)”来访问该变量。

class MyJvm2 {//效率不高

    private static MyJvm2 instance =new MyJvm2();

    private MyJvm2(){

       

    }

    public static MyJvm2 getInstance(){// double checking

        returninstance;

    }

}

 

/**

 * “饿汉式-------这种效率较高

 * 提高效率,为何用了内部类就可以提高效率呢?

 * 因为方法和类都是在使用的时候才加载的!!!!

 * 即是说,当使用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;

    }

}

0 0
原创粉丝点击