单例模式

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

创建步骤

  1. 构造函数私有化
  2. 类持有一个静态实例instance
  3. 提供一个静态方法访问单例

一个私有的构造函数、一个静态变量、一个静态方法

创建方法

  1. 同步创建

    优点: 简单

    缺点: getInstance()方法只有在第一次创建的时候才需要同步,在实例化后就不需要同步了,会降低程序性能

    public class Singleton{
        private static Singleton instance;
        
        private Singleton{}
        
        public static synchronized Singleton getInstance(){
                if(instance == null){
                    instance = new Singleton();
                }
                return instance;
        }
    }
    
  2. 急切实例化

    优点: 简单

    缺点: JVM在加载类时创建出实例,造成运行负担。

    public class Singleton{
        private static Singleton instance = new Singleton();
        
        private Singleton{}
        
        public static Singleton getInstance(){
                return instance;
        }
    }
    
  3. 双重检查加锁

    优点: 延迟实例化,减少负担,同时减少同步时间

    缺点: volatile对于java 1.4版本不支持

    public class Singleton{
        private volatile static Singleton instance; // volatile 保证内存可见
        
        private Singleton{}
        
        public static Singleton getInstance(){
                if(instance == null){                  // 检查一次
                    synchronized(Singleton.class){
                        if(instance == null){           // 再检查一次
                            instance = new Singleton();
                        }
                    }
                }
                return instance;
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容