设计模式(Design Pattern):是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。
使用设计模式的目的:使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性。
单例模式:保证整个应用中某个实例有且只有一个。
单例模式的分类:
- 饿汉模式
- 懒汉模式
一、饿汉模式
/** * 单例模式Singleton * 应用场合:有些对象只需要一个就足够了 * 作用:保证整个应用程序中某个实例有且只有一个 * 类型:饿汉模式 * */ public class Singleton { //1.将构造方法私有化,不允许外部直接创建对象 private Singleton(){ } //2.创建类的唯一实例,使用private static修饰 private static Singleton instance = new Singleton(); //3.提供一个用于获取实例的方法,使用public static修饰 public static Singleton getInstance(){ return instance; } }
饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全。
二、懒汉模式
/** * 单例模式Singleton * 应用场合:有些对象只需要一个就足够了 * 作用:保证整个应用程序中某个实例有且只有一个 * 类型:懒汉模式 * */ public class Singleton { //1.将构造方法私有化,不允许外部直接创建对象 private Singleton(){ } //2.声明类的唯一实例,使用private static修饰 private static Singleton instance; //3.提供一个用于获取实例的方法,使用public static修饰 public static Singleton getInstance(){ if(instance==null){ instance = new Singleton(); } return instance; } }
懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全。主要原因是因为在多线程中,当第一个线程进入获取实例的方法,还未开始实例化对象时被中断,第二个线程进来后发现仍然没有实例,所以会创建实例,而之后第一个线程重新进来时,依旧会创建一个线程,这样就不能保证创建唯一实例了,所以是线程不安全的,解决的办法就是在获取实例的方法内加锁。