1.定义 1)单例类只能有一个实例; 2)单例类构造方法为私有方法,必须自己创建自己的唯一实例;
2.应用场景
1)工具类对象;
2)创建对象耗时过多或耗费的资源过多,但又经常用到的对象 3.单例模式的实现 1)饿汉模式
class Singleton{ private Singleton(){} private static Singleton singleton=new Singleton(); public Singleton getInstance(){ return singleton; } } class Singleton2{ private Singleton2(){} private static Singleton2 singleton2; static{ singleton2=new Singleton2(); } }使用静态变量和静态块实现的单例模式,在类加载时便会创建,如果不使用会造成资源浪费
2)懒汉模式(延迟加载)
class Singleton3{ private Singleton3(){} private Singleton3 singleton3; public synchronized Singleton3 getInstance(){ if(singleton3==null){ singleton3=new Singleton3(); } return singleton3; } }使用synchronized内置锁实现的单例模式都是现成安全的,synchronized修饰的同步方法效率较低
class Singleton4{ private Singleton4(){} private volatile Singleton4 singleton4; public Singleton4 getInstance(){ if(singleton4==null){ synchronized(Singleton4.class){ if(singleton4==null){ singleton4=new Singleton4(); } } } return singleton4; } }使用双重校验锁实现的单例模式,效率高,推荐使用;
class Singleton5{ private Singleton5(){} private static class SingletonInstance{ private static final Singleton5 instance=new Singleton5(); } public static Singleton5 getInstance(){ return SingletonInstance.instance; } }使用静态内部类实现,静态内部类只有在第一次使用时才会加载,同时创建实例,延迟加载,同时是线程安全的;