首页 > 其他 > 详细

单例模式

时间:2020-02-24 12:57:25      阅读:54      评论:0      收藏:0      [点我收藏+]

定义:确保一个类只有一个实例,并提供一个全局访问点。

类图

技术分享图片

实现方式

懒加载:线程安全,调用getInstance时才加载,节省内存,缺点是性能较差,同步几乎只在第一次创建对象时需要。

public class Singleton {
    private static Singleton instance;
    private Singleton(){}
    public static synchronized Singleton getInstance(){
        if(instance==null){
            instance = new Singleton();
        }
        return instance;
    }
}

急切加载:系统加载时就创建实例,保证线程安全,浪费内存。

public class Singleton {
    private static Singleton instance = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return instance;
    }
}

双重加锁:懒加载的同时保持性能,不使用JDK5以前的版本,实现相对复杂。

public class Singleton {
    private static volatile Singleton instance;//volatile 保证多线程能正确处理instance变量

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

利用静态块懒加载:效果类似双重加锁,实现简单一些

public class Singleton {
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    private Singleton() {
    }

    public static final Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

枚举模式 :自带序列化机制,绝对防止多次实例化,即使面对复杂的序列化或者反射攻击的时候。经常作为实现单例的最佳方法。不适合需要单例必须扩展超类的情况(参考 《Effective Java》)

public enum SingletonEnum {
    INSTANCE;
    void someMethod(){
        System.out.println("这里是单例对象的方法!");
    }
}

单例模式

原文:https://www.cnblogs.com/camcay/p/12355983.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!