单例模式的介绍
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供了一个全局访问点来访问该实例。
需要注意的点:
每个单例类只能有一个实例
单例类必须自己创建自己的唯一实例
单例类必须给所有的其他对象提供这一实例
单例类的构造方法必须私有
单例模式的实现
单例模式有很多实现方法,主要为懒汉式和饿汉式,饿汉式为线程安全的。懒汉式不安全,以下仅仅介绍这两种方式的线程安全的实现方式
懒汉式
采用双重检查锁+volatile 的形式,不仅保证了线程安全的前提下也提高了性能
javapublic class Singleton { private volatile static Singleton singleton; private Singleton (){} public static Singleton getInstance(){ if(singleton==null){ synchronized (Singleton.class){ if(singleton==null){ singleton=new Singleton(); } } } return singleton; } }
饿汉式
这种单例实现方式被称为"饿汉式 ",因为它在类加载时就立即创建了实例。这种方式简单且线程安全,但在某些情况下可能会导致资源的浪费,因为实例在创建后可能不会被使用。
javapublic class Singleton1 { //创建 Singleton1 的一个对象 private static Singleton1 singleton1 = new Singleton1(); //让构造函数为 private,这样该类就不会被实例化 private Singleton1(){} //获取唯一可用的对象 public static Singleton1 getSingleton1(){ return singleton1; } }