1.单例模式
单例模式是程序设计模式中的一种。是为了保证整个应用中某个实例有且只有一个。
应用场合:开发中有些对象只需要一个。
特点:有且只有一个。
单例模式分为两种:
- 饿汉模式
- 懒汉模式
2.饿汉模式
2.1创建饿汉单例模式
1.创建类Singleton,在类中把构造函数设为私有的private,不允许外部调用
2.在类中调用私有的构造方法,创建实例,并且用private static修饰
3.提供一个可以获取实例的方法(getInstance()),加上public static修饰
1 public class Singleton { 2 //1.将构造方法私有化,不允许外部直接创建对象 3 private Singleton(){ 4 } 5 //2.自己在类的内部创建一个实例,是唯一的,把实例设为static,静态的 6 private static Singleton instance = new Singleton(); 7 8 //3.提供一个获取实例的方法 9 public static Singleton getInstance() { 10 return instance; 11 } 12 }
2.2测试饿汉模式
使用main方法测试,测试中调用2次getInstance(),比较2次的对象是否相等。
1 public class Test { 2 public static void main(String[] args){ 3 //调用singleton的静态实例 4 Singleton s1 = Singleton.getInstance(); 5 Singleton s2 = Singleton.getInstance(); 6 System.out.println(s1==s2); //相等,为饿汉单例模式 7 } 8 }
3.懒汉模式
3.1创建懒汉单例模式
1.创建类Singleton,在类中把构造函数设为私有的private,不允许外部调用
2.在类中调用私有的构造方法,声明一个唯一实例对象,并且用private static修饰
3.提供一个可以获取实例的方法(getInstance()),加上public static修饰,并且通过 if 语句判断实例是否为空,为空则创建一个实例
1 public class Singleton2 { 2 //1.私有化构造方法 3 private Singleton2(){ 4 5 } 6 //2.声明类的唯一实例化对象,使用private static修饰 7 private static Singleton2 instance; 8 9 //3.提供一个获取实例对象的方法,用public static修饰 10 public static Singleton2 getInstance(){ 11 //需要判断实例是否为空,为空则创建一个实例,否则返回实例 12 if (instance == null) { 13 instance = new Singleton2(); 14 } 15 return instance; 16 } 17 }
3.2测试懒汉模式
使用main方法测试,测试中调用2次getInstance(),比较2次的对象是否相等。
1 public class Test { 2 public static void main(String[] args){ 3 //调用singleton2的静态实例 4 Singleton2 s3 = Singleton2.getInstance(); 5 Singleton2 s4 = Singleton2.getInstance(); 6 System.out.println(s3==s4); //相等,为懒汉单例模式 7 } 8 }
4.区别
1.饿汉模式,只要类加载了就会创建一个唯一的实例,而懒汉模式只是在类中声明一个唯一的对象实例,只有在第一次调用 getIntance() 方法时才会创建一个实例,后面再调用就就不会再创建实例了。
2.饿汉模式的特点是加载类时比较慢,但是运行时获取对象的速度比较快,并且线程安全。
3.懒汉模式的特点是加载类时比较快,但是运行时获取对象的速度比较慢,并且线程不安全。