美文网首页
2019-12-03

2019-12-03

作者: 想去读个博 | 来源:发表于2019-12-03 14:18 被阅读0次

    单例模式
    简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例。
    getInstance()的返回值是一个对象的引用,并不是一个新的实例,所以不要错误的理解成多个对象。单例模式实现起来也很容易,直接看demo吧
    懒汉写法(线程不安全)

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

    饿汉式写法

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

    静态内部类

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

    枚举

    public enum Singleton {  
       INSTANCE;  
       public void whateverMethod() {  
       }  
    }
    它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象,可谓是很坚强的壁垒啊
    

    双重校验锁

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

    相关文章

      网友评论

          本文标题:2019-12-03

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