单例模式的几种方式!
Posted 扣丁学堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式的几种方式!相关的知识,希望对你有一定的参考价值。
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。
单例模式的几个要点
1、私有化构造函数;
2、提供一个静态的私有该对象的的属性;
3、提供被public修饰的静态方法。
单例模式的几种方式
单例模式之懒汉单例模式:
/**
* @DESC 单例模式之懒汉模式--线程安全的
* @author 强哥
*
*/
public class Single1 {
private Single1(){}
private static Single1 single=null;
public static Single1 getInstance(){
if(single==null){
synchronized ("锁") {
if(single==null){
single=new Single1();
}
}
}
return single;
}
}
单例模式之饿汉单例模式:
/**
* 懒汉模式之饿汉模式
* @author 强哥
*
*/
public class Single2 {
private Single2(){}
private static Single2 single=new Single2();
public static Single2 getInstance(){
return single;
}
}
单例模式之静态内部类实现方式:
/**
* @DESC 单例模式之懒汉模式
* @author 强哥
*
*/
public class Single {
public static void main(String[] args) {
}
private Single(){}
private static class MySingleTon{
private static Single single=new Single();
}
public static Single getInstance(){
return MySingleTon.single;
}
}
第1种:在getInstance中做了两次null检查,确保了只有第一次调用单例的时候才会做同步,这样也是线程安全的,同时避免了每次都同步的性能损耗。
第2种:饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成。
第3种,利用了classloader的机制来保证初始化instance时只有一个线程,所以也是线程安全的,同时没有性能损耗,所以一般我倾向于使用这一种。
想要 专 属 福 利 ,来找CoCo酱
微信ID:cocojiang525
点击【阅读原文】有惊喜!
以上是关于单例模式的几种方式!的主要内容,如果未能解决你的问题,请参考以下文章