Java超详细讲解设计模式之单例模式
1. 什么是单例模式?
单例模式是一种常用的设计模式,简单来说就是保证一个类只有一个实例,并且提供一个全局访问点。
它能够避免因为对象过多而导致系统性能下降的问题,实现对象的复用,以及编译器对一些变量、对象和方法进行统一管理的好处。
常见应用场景有以下几个方面:
- 一个对象需要在系统中被重复使用
- 一个共享资源(如数据库等)需要被多个不同的部件频繁访问
- 当操作系统中唯一的资源(如守护进程、计时器、文件I / O等)需要被多次访问时
2. 实现单例模式的几种方式
-
饿汉式单例模式:在类加载时就完成了初始化,所以类加载较慢、但获取对象的速度极快。
-
懒汉式单例模式(懒加载):只有当第一次创建对象时才会进行初始化,具有延迟加载的优势,但需要考虑并发的问题。
-
枚举单例模式:不仅可以解决线程同步的问题,还可以防止反序列化重新创建对象,但是不太常用。
-
静态内部类单例模式:由于是静态内部类,所以只有在使用时才会加载、具有了懒加载的效果,同时通过静态域来实现,线程同步也得以考虑,是目前最优的实现方式。
3. 示例说明
3.1 饿汉式单例模式
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton(){
//私有构造方法
}
public static Singleton getInstance(){
return instance;
}
}
3.2 懒汉式单例模式
public class Singleton {
private static volatile Singleton instance = null;
private Singleton(){
//私有构造方法
}
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
推荐使用双重校验锁的方式来实现懒汉式单例模式:
public class Singleton {
private static volatile Singleton instance = null;
private Singleton(){
//私有构造方法
}
public static Singleton getInstance(){
if(instance == null){
synchronized (Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
3.3 枚举单例模式
public enum Singleton {
INSTANCE;
public void method(){
//方法体
}
}
3.4 静态内部类单例模式
public class Singleton {
private Singleton (){
//私有构造方法
}
private static class SingletonInstance{
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance(){
return SingletonInstance.INSTANCE;
}
}
4. 总结
在实际的开发中,单例模式是非常常见的一种设计模式,通过实现单例模式,可以保证整个系统更高效,用最少的资源和时间来完成需求。当然在使用的过程中要注意线程安全和反射创建对象的问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java超详细讲解设计模式之一的单例模式 - Python技术站