大家好,又见面了,我是你们的朋友全栈君。
java三种单例模式的实现
一、单例模式介绍
单例模式是最基础的程序设计模式之一,在java上表现为,单例模式下,一个单例对象的类只能存在一个,其职责只能由这个类产生的单例完成。
优点:显而易见只用一个实例可以节省系统资源,对于一些需要经常创建销毁的对象而言,使用单例模式提高了系统性能
缺点:获取单例对象时不能直接通过其构造方法获取,而是要通过它开放的创建方法来获取,可读性会稍差一点
使用案例:比如加载某配置文件的程序对象可以是单例的,该对象在获取了配置信息后,其他需要信息的对象可以通过该单例对象获取到信息
单例的实现一:饿汉式
饿汉式意思是不管你要不要吃,我都生产出来等你吃,将你当做有需求的饿汉
(1)私有化构造方法
(2)在该类中生产唯一实例化对象,并封装为private static类型
(3)定义一个静态方法获取对象
public class A(){
//(1)私有化构造方法
private A(){
}
//(2)在该类中生产唯一实例化对象,并封装为private static类型
//注:也能使用静态代码块的方式创建实例
//private final static A instance;
//static{instance = new A();}
//与下面代码实际效果一致
private final static A instance = new A();
//(3)定义一个静态方法获取对象
public A getInstance(){
return instance;
}
}
单例的实现二:懒汉式
懒汉式是我认为你现在没有需求,等你有需求的时候再创建给你
public class A(){
//(1)私有化构造方法
private A(){
}
//(2)在该类中生产唯一实例化对象,并封装为private static类型
//与饿汉式不同这里先不着急创建对象
private final static A instance;
//(3)定义一个静态方法获取对象
public A getInstance(){
//发现需要的单例没有再实例化
if(A == null){
instance = new A();
}
return instance;
}
}
单例的实现三:静态内部类
public class A(){
//(1)定义一个静态内部类,并在里面创建一个实例对象
private static class B{
private static A instance = new A();
}
//同样,为了不让外面拿到A的构造对象,将其私有化
private static A(){
}
//暴露一个获取内部类中实例的方法
public static A getIntance(){
return B.instance;
}
}
总结
饿汉式是使用频率最高的
懒汉式在并发情况下,若是同时判定单例为null,会创建出多个实例,线程不安全,需要用到synchronize关键字来进行修饰处理
内部类的方法也比较不常用,与饿汉式相比增加了开销
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156249.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...