常见的单例模式:
1.饿汉模式
2.懒汉模式
饿汉模式
步骤: 1.构造方法私有化.(被private修饰的变量与方法只能在本类使用,因此外界无法通过构造方法直接创建对象,只能通过类名调用该类的public静态成员与方法.) 2.本类中直接创建一个类的唯一实例,并且是一个私有静态的实例. 3.创建一个公共的静态方法来返回该实例,外界可以直接通过类名调用该方法获取得到实例对象.
public class SingleTon{ //构造方法私有化 private SingleTon(){ } //创建类的唯一实例,使用private static修饰. private static SingleTon instance=new SingleTon(); //创建返回该实例的方法供外界使用,必须是public static修饰. public static SingleTon getInstance(){ return instance; } }
因为该唯一的实例是在该类被加载时就会去创建,因此称为饿汉模式.
懒汉模式
public class SingleTon{ //构造方法私有化 private SingleTon(){ } //声明一个类的引用,使用private static修饰. private static SingleTon instance; //创建返回该实例的方法,使用是public static修饰,方法中判断实例是否已经被实例化过. public static SingleTon getInstance(){ if(instance==null){ //第一次使用时会实例化该引用. instance=new SingleTon(); } return instance; } }
私有化构造方法之后,只声明静态私有对象而不实例化,在公有静态方法中判断对象为空时才去实例化一个唯一对象,使用时创建,因此称为懒汉模式
饿汉模式与懒汉模式区别:
饿汉模式:当类被加载时就会去实例化对象,不管是否使用该对象.饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全,
懒汉模式:当外部要使用该对象时才会去实例化该对象,即当外部第一次调用该方法时才会去实例化对象,以后再次调用时直接返回该实例后的对象.懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全,