美文网首页
SIngleton 单例模式

SIngleton 单例模式

作者: rommy020 | 来源:发表于2018-09-27 11:03 被阅读0次

    单例模式(Singleton)
    也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。

    一般通过 {className}.getInstance()来获得.

    1: 饿汉式

    特点: 线程安全,调用效率高,但是不能延时加载

    public class Singleton {
        private Singleton() {
        }
    
        private static Singleton singleton = new Singleton();
    
        public static Singleton getInstance(){
            return singleton;
        }
        
        //...other function
    }
    

    2: 懒汉式

    特点: 线程安全, 调用效率不高, 可以延长加载.

    public class Singleton {
        private static Singleton singleton = null;
    
        private Singleton() {
        }
        
        //注意, 这里一定要用synchronized保证线程安全
        synchronized public static Singleton getInstance(){
            if( null == singleton )
                singleton = new Singleton();
    
            return singleton;
        }
    
        //...other function
    }
    

    3: 懒汉式--双重检查

    特点: 线程安全, 调用效率高, 可以延长加载.

    方法2中的性能不够好. 可以做如下的改进, volatile关键字的重要作用是禁止指令重排序, 保证内存不会出现内存分配, 返回对象引用, 初始化这样的错序.
    下面的代码即为饿汉式的双重检查.

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

    4: 枚举

    特点: 线程安全, 调用效率高, 不能延长加载, 代码精简

    public enum Singleton {
        INSTANCE;
    }
    

    相关文章

      网友评论

          本文标题:SIngleton 单例模式

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