美文网首页
单例模式

单例模式

作者: 云木杉 | 来源:发表于2020-10-15 22:46 被阅读0次
    • 保证一个类只有一个实例,并提供一个访问全局访问点。

    • 饿汉式 :在类加载时就完成了初始化,所以整个应用加载比较慢,但获取对象速度比较快。基于类加载机制,避免了线程问题。

    • 缺点就是如果从始至终没用这个实例,则造成内存浪费。

    public Singleton{
    
      private static Singleton instance = new Singleton();
    
      private Singleton(){}
    
      public static  Singleton getInstance(){
          return instance;
      }
    
    }
    
    • 懒汉式 懒汉模式声明了一个静态对象,在用户第一次调用时初始化。这虽然节约了资源,但第一次加载时需要实例化,反应稍慢一些,而且在多线程时不能正常工作。

    线程不安全

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

    线程安全

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

    静态内部类

    public Singleton{
    
      private Singleton(){}
    
      public static Singleton getInstance(){
              return SingletonHelp.instance;
       }
      private static class SingletonHelp{
        private static final Singleton instance = new Singleton();
      }
    }
    

    2.单例模式的使用场景
    在一个系统中,要求一个类有且仅有一个对象,它的具体使用场景如下:

    • 整个项目需要一个共享访问点或共享数据。
    • 创建一个对象需要耗费的资源过多,比如访问I/O或者数据库等资源。
    • 工具类对象。

    相关文章

      网友评论

          本文标题:单例模式

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