天天看点

单例模式Singleton(创建模式)

没有使用单例模式之前

使用单例模式后

优点

单例设计模式有八种

弊端:

如果把person换成dbaccess这个工具类,我们可以发现整个项目会创建出多个工具类实例,浪费空间。

实际上:

整个项目,我们只需要一个工具类实例,就可以维持项目的正常运作,那么此时让该工具类实现单例,解决资源浪费的情况。

单例模式Singleton(创建模式)

案例代码

运行显示

单例模式Singleton(创建模式)

如下图和案例的结果,可以得出结论:

整个项目使用到工具类,只需要实例化一次就可以保障整个项目的运转,节约了堆内存的空间

单例模式Singleton(创建模式)

分类:

饿汉式(静态常量)

饿汉式(静态代码块)

懒汉式(线程不安全)

懒汉式(线程安全,同步代码块)

懒汉式(线程安全,同步方法)

双重检查

静态内部类

枚举

1.饿汉式(静态常量)

2.饿汉式(静态代码块)

** 3.懒汉式(线程不安全)**

4. 懒汉式(线程安全,同步代码块)

5.懒汉式(线程安全,同步方法)

6.双重检查

7.静态内部类

8.枚举

client类就不能直接person p = new person();

避免了写多个实例的创建,保证了空间不会被浪费

单例模式Singleton(创建模式)

结论:

单例中两种饿汉式可用,但存在性能问题

单例中三种饿汉式不推荐,存在线程安全问题,同步方法的方式解决性能极差

最后三种单例式值得推荐(双重检查、静态内部类、枚举)

注意事项

系统内存中该类只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象使用单例模式可以提升系统性能

当想实例化一个单例类的时候,必须要记住使用相应的获取对象的方法,而不是使用new

应用

jdk源码中runtime类

tomcat中applicationcontext类

session工厂

建议单例使用饿汉式,代码更加简洁

继续阅读