(面试常问)4种单例设计模式的总结(内含代码以及分析)

Wesley13
• 阅读 713

单例设计模式:

    单例模式,是一种常见的软件设计模式.在它的核心结构中只包含了一个被称为单例的特殊类.通过单例模式可以保证系统中只有该类的一个实例对象.

优点 :

    实例控制:单例模式会阻止其它对象实例化其自己的单例对象的副本,从而确保所有对象都访问的是唯一的实例 

    灵活性:因为类控制了实例化过程,所以类可以很灵活的更改实例化的过程

实现单例需要如下几步(基础):

    1私有化构造函数

    2创建一个本类对象

    3 向外提供一个方法,返回这个本类对象

1饿汉式

    优点:线程安全,允许多个线程同时访问

    缺点:会提前初始化单例对象(在类加载的时候)

(面试常问)4种单例设计模式的总结(内含代码以及分析) (面试常问)4种单例设计模式的总结(内含代码以及分析)

 1 /**
 2 * @Author : zhuhuicong
 3 * 2018/11/27 21:08
 4 * @Version 1.0
 5 * 懒汉式
 6 */
 7 public class SingalDemo01 {
 8 private static SingalDemo01 singalDemo01 = new SingalDemo01();
 9 private SingalDemo01() {
10 }
11 
12 public static SingalDemo01 getInstance(){
13 return singalDemo01;
14 }
15 }

View Code

2懒汉式:

    优点:不会提前初始化单例对象

    缺点:线程不安全

        解决方案可以通过加锁进行解决,但是加锁之后,效率低

(面试常问)4种单例设计模式的总结(内含代码以及分析) (面试常问)4种单例设计模式的总结(内含代码以及分析)

 1 /**
 2 * @Author : zhuhuicong
 3 * 2018/11/27 21:12
 4 * @Version 1.0
 5 */
 6 public class SingalDemo02 {
 7 private static SingalDemo02 singalDemo02 = null;
 8 private SingalDemo02() {
 9 }
10 public static synchronized SingalDemo02 getInstance(){
11 if(singalDemo02==null){
12 singalDemo02 = new SingalDemo02();
13 }
14 return singalDemo02;
15 }
16 }

View Code

3 双重检测锁机制:

    线程安全并且不会提前初始化实例对象(注意两次判断检测的作用)

(面试常问)4种单例设计模式的总结(内含代码以及分析) (面试常问)4种单例设计模式的总结(内含代码以及分析)

 1 /**
 2 * @Author : zhuhuicong
 3 * 2018/11/27 21:17
 4 * @Version 1.0
 5 */
 6 public class SingalDemo03 {
 7 private static SingalDemo03 singalDemo03 = null;
 8 private SingalDemo03() {
 9 }
10 
11 public static SingalDemo03 getInstance(){
12 if(singalDemo03==null){ //第一个if是为了避免每次进来都加锁,提高效率
13 synchronized (SingalDemo03.class){
14 if(singalDemo03==null){ //第二个if是为了避免生成多个实例对象
15 singalDemo03 = new SingalDemo03();
16 }
17 }
18 }
19 return singalDemo03;
20 }
21 }

View Code

4静态内部类的方式:

    线程安全,并且不会提前初始化(对象只会在内部类加载的时候初始化,内部类只会在调用getInstance()方法的时候加载)

 

(面试常问)4种单例设计模式的总结(内含代码以及分析) (面试常问)4种单例设计模式的总结(内含代码以及分析)

 1 /**
 2 * @Author : zhuhuicong
 3 * 2018/11/27 21:24
 4 * @Version 1.0
 5 */
 6 public class SingalDemo04 {
 7 private SingalDemo04() {
 8 }
 9 
10 public static class Inner{
11 public static SingalDemo04 Instance;
12 }
13 
14 public static SingalDemo04 getInstance(){
15 return Inner.Instance;
16 }
17 }

View Code

点赞
收藏
评论区
推荐文章
3A网络 3A网络
2年前
Golang 常见设计模式之单例模式
之前我们已经看过了Golang常见设计模式中的装饰和选项模式,今天要看的是Golang设计模式里最简单的单例模式。单例模式的作用是确保无论对象被实例化多少次,全局都只有一个实例存在。根据这一特性,我们可以将其应用到全局唯一性配置、数据库连接对象、文件访问对象等。Go语言实现单例模式的方法有很多种,下面我们就一起来看一下。饿汉式饿汉式实现单例模式非
Wesley13 Wesley13
3年前
java设计模式1
1:单例模式简介  单例模式是一种常用的软件设计模式,它确保某个类只有一个实例,而且自行实例化并向整个系统提供唯一的实例。总而言之就是在系统中只会存在一个对象,其中的数据是共享的  特点:    单例类只能有一个实例,所以一般会用static进行修释。    单例类必须自己创建自己的唯一实例。也就是在类中要new一个自己。    单例类必
Wesley13 Wesley13
3年前
java 23种设计模式(五、单例模式)
作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。单例模式的结构  单例模式的特点:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。  饿汉式单例类publicclassEagerSingleton
红烧土豆泥 红烧土豆泥
3年前
创建型模式之单例设计模式
什么是单例设计模式?顾名思义,只有一个实例。单例模式它主要是确保一个类只有一个实例,并且可以提供一个全局的访问点。废话少说,直接上干货了单例模式之饿汉式所谓饿汉式,顾名思义,“它很饿”。所以说,它一旦被加载进来,就会直接实例化一个对象。例如:languageclassSingleton{privatestaticfin
Wesley13 Wesley13
3年前
JAVA设计模式之单例设计模式
    单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。  在JAVA中实现单例,必须了解JAVA内存机制,JAVA中实例对象存在于堆内存中,若要实现单例,必须满足两个条件:  1.限制类实例化对象。即只能产生一个对象。
Wesley13 Wesley13
3年前
Java单例模式
什么是单例模式  单例模式是在程序中,一个类保证只有一个实例,并提供统一的访问入口。为什么要用单例模式节省内存节省计算如对象实例中的一样的,那就不用每次都创建一个对象方便管理因为单例提供一个统一的访问入口,不需要创建N多个对象,很多工具类都用了单例实现,如日志、字符串工具类
Wesley13 Wesley13
3年前
PHP单例模式(精讲)
首先我们要明确单例模式这个概念,那么什么是单例模式呢?单例模式顾名思义,就是只有一个实例。作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类我们称之为单例类。单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例
Stella981 Stella981
3年前
C#设计模式(1)——单例模式(Singleton)
单例模式即所谓的一个类只能有一个实例,也就是类只能在内部实例一次,然后提供这一实例,外部无法对此类实例化。单例模式的特点:1、只能有一个实例;2、只能自己创建自己的唯一实例;3、必须给所有其他的对象提供这一实例。普通单例模式(没有考虑线程安全)  ///<summary///单例模式
Wesley13 Wesley13
3年前
Java设计模式:Singleton(单例)模式
概念定义Singleton(单例)模式是指在程序运行期间,某些类只实例化一次,创建一个全局唯一对象。因此,单例类只能有一个实例,且必须自己创建自己的这个唯一实例,并对外提供访问该实例的方式。单例模式主要是为了避免创建多个实例造成的资源浪费,以及多个实例多次调用容易导致结果出现不一致等问题。例如,一个系统只能有一个窗口管理器或文件系统,一个程
Wesley13 Wesley13
3年前
23种设计模式(1):单例模式
定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。类型:创建类模式类图:!23种设计模式(1):单例模式第1张|快课网(http://static.oschina.net/uploads/img/201407/05200605_0dij.gif"23种设计模式(1):单例模式