单例模式

来源:互联网 发布:虚拟机安装mac 内存 编辑:程序博客网 时间:2024/05/16 07:00
/** *  *  单例模式:饿汉式 */class Demo{    private static Demo d=new Demo();    private Demo(){}    public static Demo getInstance(){        return d;    }}/** *  * 懒汉式:在多线程情况下会产生多例的情况,故采用双重校验以提高synchronized效率 * */class Demo1{    private static Demo1 d;    private Demo1(){}    public static Demo1 getInstance(){        if(d==null){            synchronized (Demo1.class) {                if(d==null){                    d=new Demo1();                }            }        }        return d;    }}/** *  * 使用静态内部类实现单例模式 * 然而在序列化对象,使用默认的方式运行得到的结果还是多例的。 * 解决方法就是在反序列化中使用readResolve()方法 */class Demo2{    private Demo2(){}    private static class Inner{        private static Demo2 d=new Demo2();    }    public static Demo2 getInstance(){        return Inner.d;    }}/** *  * 使用静态代码块 *  */class Demo3{    private Demo3(){}    private static Demo3 d=null;    static{        d=new Demo3();    }    public static Demo3 getInstance(){        return d;    }}/** * 使用枚举实现单例 * */enum Demo4{    INSTANCE;}
0 0