美文网首页
creator :单例模式 ( Singleton Patter

creator :单例模式 ( Singleton Patter

作者: 柳源居士 | 来源:发表于2019-02-27 23:33 被阅读0次

    单例模式的特点是 一个对象只有一个实例。可以用于系统全局变量的设置。
    实现思路:
    利用的是private 方法只能类本身调用。因此把构造方法声明为private,只能通过类内部的public static方法来声明该类的实现(如果不声明为static,则无法调用,变成先有鸡还是先有蛋的问题了),并用一个该类型的static变量来保存该类的唯一实例。
    注意:
    使用单列模式应该注意线程安全问题,可以改进成线程安全的单例。
    使用类加载器,同样会创建多个实例

    类图.png

    实现:

    package singleton;
    
    public class Singleton {
        private static Singleton instance;
    
        private Singleton() {
    
        }
        //延迟实例化,线程不安全
        public static Singleton getInstance() {
            if(instance==null){
                instance=new Singleton();
            }
            return instance;
        }
    
        //带线程锁的延迟实例化,可以确保线程安全,但效率低下,即使实例存在,还是会调用线程锁
        //如果对调用此方法导致的效率问题不是很关心,则可以保持
       /* public static synchronized Singleton getInstance() {
            if(instance==null){
                instance=new Singleton();
            }
            return instance;
        }*/
    
        //急切实例化,线程安全
        //private static Singleton instance=new Singleton();
        /*
        public static Singleton getInstance() {
            return instance;
        }
        */
    
    }
    

    双重检验法

    package singleton;
    
    public class DoubleCheckSingleton {
        //volatile确保多线程时,正确使用实例。确保共享变量的可见性。
        private volatile static DoubleCheckSingleton instance;
    
        private DoubleCheckSingleton() {
        }
    
        public static DoubleCheckSingleton getInstance(){
            if(instance==null){
                synchronized (Singleton.class){ //对象全局锁
                    if(instance==null){
                        instance=new DoubleCheckSingleton();
                    }
                }
            }
            return instance;
        }
    }
    

    相关文章

      网友评论

          本文标题:creator :单例模式 ( Singleton Patter

          本文链接:https://www.haomeiwen.com/subject/zfohlqtx.html