前言:
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中(jvm)一个类只有一个实例。即一个类只有一个对象实例;这几种模式有几种好处:
1.可以避免实例存在多个引起程序的逻辑错误(比如一个国家有多个主席,肯定会一团糟)
2.某些创建频繁的类,使用单列模式可以减轻内存的压力
3.因为类控制了实例化过程,所以类可以灵活更改实例化过程。
单列模式的三种模式:
1.饿汉模式
//饿汉式--典型的穷屌丝,吃了上顿没下顿。所以要提前准备(类加载就给准备好 ) public class Singleton { //在自己内部定义自己的一个实例,只供内部调用 private static Singleton singleton=new Singleton(); private Singleton(){} //这里提供了一个供外部访问本class的静态方法,可以直接访问 public static Singleton getSingleton(){ return singleton; } }
这种模式虽然好用,也是线程安全的,但如果多了,严重影响性能。
2.饱汉式(也叫懒汉式)
//饱汉式--典型土豪,吃饱了撑着;饿的时候才临时叫人准备(创建实例) public class Singleton { private static Singleton singleton=null; private Singleton(){} public static synchronized Singleton getSingleton(){ if (singleton==null) { singleton=new Singleton(); } return singleton; } }
这种模式用的比较多,但如果这个类并发使用率高的时候,就影响性能了。
3.双重锁模式
//饱汉模式的双重锁模式,提高效率 public class Singleton { private static Singleton singleton = null; private Singleton() { } public static Singleton getSingleton() { //只有对象为null的时候才要排队 if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
饱汉模式的优化,进行双重判断,当已经创建过实例对象后就无需加锁,提高效率。也是一种推荐使用的方式。
时间: 2024-12-11 03:49:16