-
什么是单例模式
-
:Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。一些管理器和控制器常被设计成单例模式。
-
为什么使用单例模式
-
单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间;能够避免由于操作多个实例导致的逻辑错误。如果一个对象有可能贯穿整个应用程序,而且起到了全局统一管理控制的作用,那么单例模式也许是一个值得考虑的选择。
-
单例模式的特点
-
单例类只能有一个实例。
-
单例类必须自己创建自己的唯一实例。
-
单例类必须给所有其他对象提供这一实例。
-
-
单例模式有很多种写法,大部分写法都或多或少有一些不足。下面将分别对这几种写法进行介绍:
-
饿汉模式(常用)
-
代码:
public class Singleton{ private static Singleton instance = new Singleton();
-
private Singleton(){
} public static Singleton newInstance(){ return instance; } }
-
优缺点:
-
优点:
-
从代码中我们看到,类的构造函数定义为private的,保证其他类不能实例化此类,然后提供了一个静态实例并返回给调用者。
-
饿汉模式是最简单的一种实现方式。
-
只在类加载的时候创建一次实例,不会存在多个线程创建多个实例的情况,避免了多线程同步的问题。
-
-
缺点:即使这个单例没有用到也会被创建,而且在类加载之后就被创建,内存就被浪费了。
-
适用场合:这种实现方式适合单例占用内存比较小,在初始化时就会被用到的情况。但是,如果单例占用的内存比较大,或单例只是在某个特定场景下才会用到,使用饿汉模式就不合适了。
-
-
-
懒汉模式
-
代码:
-
普通模式(线程不安全):
-
代码:
public class Singleton{
-
private static Singleton instance = null;
-
private Singleton(){}
-
public static Singleton newInstance(){
-
if(null == instance){
-
instance = new Singleton(); }
-
return instance; } }
-
优缺点:
-
优点:懒汉模式中单例是在需要的时候才去创建的,如果单例已经创建,再次调用获取接口将不会重新创建新的对象,而是直接返回之前创建的对象。
-
缺点:但是这里的懒汉模式并没有考虑线程安全问题,在多个线程可能会并发调用它的getInstance()方法,将导致创建多个实例。
-
使用场合:如果某个单例使用的次数少,并且创建单例消耗的资源较多,那么就需要实现单例的按需创建,这个时候使用懒汉模式就是一个不错的选择。
-
-
-
-
单例模式及其用法
最新推荐文章于 2023-06-03 11:46:40 发布