java三种单例模式的实现
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关键字来进⾏修饰处理内部类的⽅法也⽐较不常⽤,与饿汉式相⽐增加了开销
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论