单例模式的几种方式!

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  

点击【阅读原文】有惊喜!

以上是关于单例模式的几种方式!的主要内容,如果未能解决你的问题,请参考以下文章

单例模式的几种实现方式

单例模式的几种实现方式

单例模式的几种写法的差异

单例模式的几种写法

单例模式的几种写法

python中的单例模式的几种方式