单例模式

xiaoxiao2021-02-27  339

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; } }

使用静态内部类实现,静态内部类只有在第一次使用时才会加载,同时创建实例,延迟加载,同时是线程安全的;

 

 

转载请注明原文地址: https://www.6miu.com/read-3328.html

最新回复(0)