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;  
        }  
    }
    

      

    这样效率也能大大提升

    问题来了,小伙伴们

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

  • 相关阅读:
    第十一课:Python语句讲解
    第十节课:再议数据结构与数据类型
    第九节课:这些难缠的符号
    第八节课:基本数据结构习题
    第七节课:字典
    第六节课:元组和集合
    第五节课:Python列表的应用
    Oracle问题处理
    springmvc读取服务器磁盘图片,显示于前台页面
    spring从服务器磁盘读取图片,然后显示于前端页面上
  • 原文地址:https://www.cnblogs.com/f-bob/p/14900489.html
Copyright © 2011-2022 走看看