`

单例模式深入学习

 
阅读更多
  最近去阿里面试,到第三轮被告知没通过,本人目前工作六年了,自我感觉良好,但是还是无情的被阿里拒绝了,于是痛定思痛,从此潜心学习,夯实基础,摈弃不求甚解,眼高手低的毛病,废话不说,开始今天话题。
  单例模式,通俗的讲,就是某一段时间内,只能存在一个该类的实例,单例模式分为两种,一种是恶汉模式,一种是懒汉模式,先看懒汉模式:

/**
*
*/
package com.goldcard.firmware.upgrade.service;

/**
* @author 1903
*
*/
public class Singleton1 {

private static final Singleton1 singleton=null;

//构造方法必须是私有的
private Singleton1(){

};


public static synchronized  Singleton1 getInstance(){
if(singleton==null){
return new Singleton1();
}
return singleton;
}

}

懒汉模式就是只有用到的时候,才会new 出一个实例,所以称为懒汉模式,记住构造方法必须是私有的,只有这样才能控制使用者不能随意创造实例。

恶汉模式:

/**
*
*/
package com.goldcard.firmware.upgrade.service;

/**
* @author 1903
*
*/
public class Singleton2 {

//提前实例化
public static final Singleton2 singleton=new Singleton2();

private Singleton2(){}


public static Singleton2 getInstance(){

return singleton;
}

}

恶汉模式和懒汉模式的区别是,当jvm 虚拟机加载Singleton2 的时候,就已经把Singleton2 实例化好,供使用者调用。

以上是两种最简单的单例模式,有一种单例模式的演变,叫double check lock,如下


/**
*
*/
package com.goldcard.firmware.upgrade.service;

/**
* @author 1903
*
*/
public class Singleton1 {

private static final Singleton1 singleton=null;

//构造方法必须是私有的
private Singleton1(){

};


public static   Singleton1 getInstance(){
if(singleton==null){
    synchronized (Singleton1.class) {
    if(singleton==null){
    return new Singleton1();
    }
}
}
return singleton;
}

}

其实这种模式算是懒汉模式的延伸,看看和最上面的区别,其实区别就是把synchronized 从方法上拿走,放在了方法快中,好处是什么呢,肯定性能比第一种要高,因为synchronized 关键字作用在方法上的话,当有线程调用改方法的时候,该类的其他静态方法不能访问。

扩展:
    其实单例模式有很多种实现方式,但是目的只有一个只要能保证实例只有一个就像,想想枚举算不算单例模式,答案是当然的,枚举构造方法都是private的,枚举中的元素都是public static finall来修饰,更关键的是能够防止通过反序列化实例化实例,大家都知道反序列化是不用调用构造函数来创建实例的;
  
   大家都知道spring管理的bean都是单例的,spring容器是怎么管理的,其实就是将实例化好的bean 缓存到map中,让map来保证只能有一个bean的实例,可以去看spring源码。









分享到:
评论

相关推荐

    设计模式单例模式和工厂模式综合应用

    总的来说,这个项目为学习和理解单例模式和工厂模式在实际开发中的应用提供了一个很好的示例。通过结合这两种模式,可以构建出既保证了对象唯一性,又能灵活应对不同产品创建需求的系统。对于Java开发者来说,深入...

    设计模式之单例模式(结合工厂模式)

    在项目中,`src`目录可能包含了这些设计模式的源码示例,可以用来学习和理解如何实际应用单例模式和工厂模式。通过阅读和分析这些代码,你可以更深入地理解这两种模式的实现细节及其在实际开发中的作用。同时,也...

    java单例模式实例

    单例模式是软件设计模式中的一种经典模式,用于确保一个类只有一个实例,并提供一个全局访问点。...通过学习和实践这些单例模式的实现,我们可以更好地理解和应用设计模式,提升代码的质量和可维护性。

    设计模式C++学习之单例模式(Singleton)

    在C++中,实现单例模式有多种方法,我们将会深入探讨这一模式的原理、优缺点以及如何在实际编程中应用。 单例模式的核心在于控制类的实例化过程,防止多处代码创建多个实例导致资源的浪费或者状态不一致的问题。在...

    设计模式 中的 单例模式和观察者模式

    首先,让我们深入了解单例模式。单例模式是一种确保一个类只有一个实例,并提供全局访问点的设计模式。这种模式在资源管理、缓存、对话框、注册表设置、日志记录等场景中非常有用。为了实现单例,通常我们会创建一个...

    java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂 第二部分

    本篇将深入探讨标题中提及的几种设计模式:Model-View-Controller(MVC)模式、单例模式、代理模式以及工厂模式,尤其是简单工厂模式。 **1. Model-View-Controller (MVC) 模式** MVC模式是一种架构模式,它将应用...

    最简单的单例模式源码

    接下来,我们将深入探讨单例模式的实现原理,以及如何通过提供的`Singleton.java`文件实现一个简单的单例。 首先,单例模式的基本要求是: 1. **唯一性**:确保类只有一个实例。 2. **全局访问**:提供一个全局...

    设计模式入门之一:深入单例模式

    单例模式是设计模式中最基础且常用的一种,它旨在确保一个类只有一个实例,并提供一个全局访问点。在软件开发中,有些对象只需要一个实例就能满足需求,比如线程池、数据库连接、配置管理等。使用单例模式可以避免...

    IOS单例模式Demo

    单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。在iOS开发中,单例模式被广泛应用于管理共享资源、配置设置...通过分析和研究`Singleton`中的示例,你将对单例模式有更深入的理解。

    JAVA单例模式的登录案例

    根据给定的信息,我们可以深入探讨Java单例模式的登录案例,并从中提炼出多个重要的知识点。 ### 单例模式概述 单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式通常...

    单例模式(Singleton)的6种实现

    在学习和应用单例模式时,还需注意单例模式的扩展性和测试性问题。例如,单例类不应该被继承,否则每个子类都可以创建实例,这违背了单例模式的初衷。另外,在测试时,单例类往往难以进行单元测试,因为它们没有公共...

    php+mysql+jqury+ajax+mvc+单例模式事例

    在IT领域,PHP、MySQL、jQuery、Ajax以及MVC(Model-View-Controller)和单例模式是构建Web应用程序的核心技术。...通过学习这个项目,开发者可以深入了解这些技术如何协同工作,构建出高效、交互性强的Web应用。

    C++单例模式示例代码

    下面我们将深入探讨C++中的单例模式,以及如何实现它。 单例模式的核心思想是限制类的实例化过程,确保在整个程序生命周期中只有一个实例存在。这通常通过以下步骤实现: 1. 封锁构造函数:单例类的构造函数通常...

    Qt单例设计模式(1-8)

    单例模式的主要目的是控制类的实例化过程,确保在整个应用程序中,只有一个类的实例存在。它防止了多个实例导致的资源浪费和潜在的同步问题。在C++和Qt中,实现单例模式通常采用静态成员变量和私有构造函数的方式。 ...

    J2EE +单例模式 中文文档

    学习J2EE和单例模式,不仅可以深入理解Java企业级开发的原理,还能提升代码质量和系统性能。这份"J2EE +单例模式 中文文档"应该包含了这两个主题的相关知识,包括理论介绍、代码示例和实践应用等,对于Java初学者来...

    单例模式.zipIOS应用例子源码下载

    这个“单例模式.zip”文件包含的是一个适用于iOS平台的单例模式应用示例源代码,对于学生、个人开发者以及公司团队来说,都是很好的学习和参考材料。 单例模式的核心思想是限制类的实例化过程,通常通过私有化构造...

    单例模式分析及代码

    单例模式是软件设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在系统中需要频繁创建和销毁的对象,或者...通过深入学习和实践,我们可以更好地运用单例模式,提高代码的可维护性和效率。

    C#单例模式视频讲解

    《C#面向对象设计模式纵横谈(2):Singleton 单件(创建型模式)》这个视频教程很可能深入浅出地介绍了单例模式的概念、实现方式以及在实际项目中的应用案例,对于学习和掌握单例模式是很好的参考资料。通过观看和实践...

    IOS应用源码Demo-单例模式-毕设学习.zip

    在"IOS应用源码Demo-单例模式-毕设学习.zip"这个压缩包中,你可以找到一个关于单例模式的实际示例,这对于正在进行毕业设计或者论文写作的iOS开发者来说是一份宝贵的学习资料。 单例模式的主要特点和优势包括: 1....

Global site tag (gtag.js) - Google Analytics