设计模式(1):单例模式

简单点来说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器所示被private修饰的,一般通过getInstance()的方法获取他们的实例。

getInstance()的返回值是一个对象的引用,并不是一个新的实例,所以不要错误的理解成多个对象,单例实现起来也很容易,看如下demo:

懒汉式(线程安全)

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

静态内部类

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

枚举类

这种方式是Effective Java作者Josh Bloch 提倡的方式,它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象,可谓是很坚强的壁垒啊,不过,个人认为由于1.5中才加入enum特性,用这种方式写不免让人感觉生疏。

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

posted @ 2021-12-16 20:34  提莫_队长  阅读(35)  评论(0编辑  收藏  举报