zoukankan      html  css  js  c++  java
  • 单例模式

    第一个单例模式

    public class SingleObject {
     
       //创建 SingleObject 的一个对象
       private static SingleObject instance = new SingleObject();
     
       //让构造函数为 private,这样该类就不会被实例化
       private SingleObject(){}
     
       //获取唯一可用的对象
       public static SingleObject getInstance(){
          return instance;
       }
     
       public void showMessage(){
          System.out.println("Hello World!");
       }
    }

    获取对象

    class SingletonPatternDemo {
        public static void main(String[] args) {
    
            //不合法的构造函数
            //编译时错误:构造函数 SingleObject() 是不可见的
            //SingleObject object = new SingleObject();
    
            //获取唯一可用的对象
            SingleObject object = SingleObject.getInstance();
    
            //显示消息
            object.showMessage();
        }
    }
    

    执行程序,输出结果:

    Hello World!


    单例模式的几种实现方式

    懒汉式

    public class Singleton {  
        private static Singleton instance;  
        private Singleton (){}  
      
        public static 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;  
        }  
    }
    

      

    这两种是基本的单例实现

    这时候我们要考虑线程安全问题,懒汉式是非线程安全的,可以在其获取对象的方法上增加synchornized,使其变成线程安全的,但是这样做有些影响效率,所以我们引入双检锁机制,

    代码如下:

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

      

    这样效率也能大大提升

    问题来了,小伙伴们

    为什么要使用单例模式哪?

  • 相关阅读:
    使用Dynamics 365 Diagnostics 来检查网络链接
    Dynamics 365 使用power apps 创建 Auto Number
    Dynamics 365 多语言配置
    在AAD 注册 API permission
    python学习笔记20:序列
    python学习笔记19:集合set
    python学习笔记18:字典dict
    python学习笔记17:列表list
    python学习笔记16:正则表达式
    python学习笔记15:通过字符串导入模块
  • 原文地址:https://www.cnblogs.com/f-bob/p/14900489.html
Copyright © 2011-2022 走看看