`
lfc_jack
  • 浏览: 144929 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

java基础之-单列模式-Singleton

阅读更多
单例模式的作用:

/**
*  单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:
*
*1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
*
*2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
*
* 3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。
*(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。
*/


懒汉式单例

何为懒汉式单例呢,可以这样理解,单例模式呢,其在整个应用程序的生命周期中只存在一个实例,

懒汉式呢,就是这个单例类的这个唯一实例是在第一次使用 GetInstance()时实例化的,

如果您不调用 GetInstance()的话,这个实例是不会存在的,即为 null

形象点说呢,就是你不去动它的话,它自己是不会实例化的,所以可以称之为懒汉。

其实呢,我前面在介绍单例模式的这几个 Demo 中都是使用的懒汉式单例,

看下面的 GetInstance()方法就明白了:

   
    public static Singleton GetInstance() 
        { 
            if (singleton == null) 
            { 
                lock (syncObject) 
                {

                    if (singleton == null) 
                    { 
                        singleton = new Singleton(); 
                    } 
                } 
            } 
            return singleton; 
        }

从上面的这个 GetInstance()中可以看出这个单例类的唯一实例是在第一次调用 GetInstance()时实例化的,

所以此为懒汉式单例。

              

           

饿汉式单例

上面介绍了饿汉式单例,到这里来理解懒汉式单例的话,就容易多了,懒汉式单例由于人懒,

所以其自己是不会主动实例化单例类的唯一实例的,而饿汉式的话,则刚好相反,

其由于肚子饿了,所以到处找东西吃,人也变得主动了很多,所以根本就不需要别人来催他实例化单例类的为一实例,

其自己就会主动实例化单例类的这个唯一类。

在 C# 中,可以用特殊的方式实现饿汉式单例,即使用静态初始化来完成饿汉式单例模式

下面就来看一看饿汉式单例类

namespace Singleton 
{ 
    public sealed class Singleton 
    { 
        private static readonly Singleton singleton = new Singleton();

        private Singleton() 
        { 
        }

        public static Singleton GetInstance() 
        { 
            return singleton; 
        } 
    } 
}


要先在这里提一下的是使用静态初始化的话,无需显示地编写线程安全代码,

C# 与 CLR 会自动解决前面提到的懒汉式单例类时出现的多线程同步问题。

上面的饿汉式单例类中可以看到,当整个类被加载的时候,就会自行初始化 singleton 这个静态只读变量。

而非在第一次调用 GetInstance()时再来实例化单例类的唯一实例,所以这就是一种饿汉式的单例类。


备注:

一、单例模式是用来实现在整个程序中只有一个实例的。

二、单例类的构造函数必须为私有,同时单例类必须提供一个全局访问点。

三、单例模式在多线程下的同步问题和性能问题的解决。

四、懒汉式和饿汉式单例类




参考的文章地址:

http://www.cnblogs.com/BoyXiao/archive/2010/05/07/1729376.html?login=1
分享到:
评论

相关推荐

    设计模式--单例模式java例子

    单例模式是软件设计模式中的一种经典模式,它在Java编程中被广泛使用。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于可以控制实例的数量,减少资源消耗,同时便于协调整个...

    单列模式用例

    单列模式(Singleton Pattern)是设计模式中的一种经典模式,主要用来确保一个类只有一个实例,并提供一个全局访问点。这种模式常被用于控制资源的共享,例如配置管理、线程池或者数据库连接池等场景。在Java编程...

    设计模式之单例模式

    单例模式是软件设计模式中的一种经典模式,它在许多实际场景中被广泛使用,尤其在需要控制类的实例只有一个的情况下。单例模式确保无论在程序的任何地方,只要通过特定方式请求创建该类的对象,始终只会返回同一个...

    单例模式的几种实现方式demo

    单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制数据库连接、缓存管理、线程池等。下面我们将深入探讨单例模式的几种实现...

    使用单例模式创建学生管理系统(饿汉式、懒汉式)

    在Java或类似的面向对象编程语言中,单例模式常用于管理共享资源,如数据库连接池、线程池或者配置文件等。在这个场景中,我们将探讨如何使用单例模式来创建一个学生管理系统,主要涉及“饿汉式”和“懒汉式”两种...

    单例模式演示PPT和实例

    单例模式的名称是“Singleton”,来源于英文单词“单一”。在Java语言中,实现单例模式主要有三种方式: 1. **饿汉式**(Eager Initialization):这是最简单的实现方式,类加载时就创建了单例实例。这样保证了线程...

    单例模式详解

    单例模式是 Java 设计模式中的一种常见模式,旨在保证整个应用中只有一个类的实例存在。单例模式分为三种:懒汉式单例、饿汉式单例、登记式单例。下面对单例模式的特点、实现方式和应用场景进行详细介绍。 单例模式...

    单列模式详解

    综上所述,单例模式通过限制类的实例化次数为一次,提供了对单一实例的全局访问,是软件开发中常见的设计模式之一。不同的实现方式各有优缺点,开发者应根据具体的应用场景和需求选择最合适的实现策略。

    java面试基础题,绝对适合面试使用

    【Java面试基础题详解】 1. **final, finally, finalize的区别** - `final`:用于修饰类、方法和变量,表示不可变性。对于类,它禁止子类继承;对于方法,它防止方法被覆盖;对于变量,一旦赋值后不能再次赋值。 ...

    单例模式.txt

    根据提供的文件信息,我们可以推断出此文档主要讨论的是单例设计模式,但实际上提到了简单工厂模式。然而,由于【部分内容】中包含了一些无法识别的文字,我们无法直接从中提取具体的信息。因此,我们将基于【标题】...

    Kotlin中单例模式和Java的对比浅析

    Kotlin 中单例模式和 Java 的对比浅析 Kotlin 中单例模式是指在应用程序中确保某个类仅有一个实例,并提供一个全局访问点的机制。单例模式是一种常用的设计模式,在 Java 和 Kotlin 中都有多种实现方式。下面我们将...

    技术人员面试问题之JAVA篇.doc

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。以下是一些针对Java程序员面试中常见的问题及答案: 1. **final, finally, finalize的区别**: - `final` 关键字用于声明不可变的变量、...

    java程序员面试32问,面试时必须知道的问题

    - Singleton模式确保一个类只有一个实例,并提供全局访问点。实现方式包括饿汉式、懒汉式(线程安全)等。 以上是Java程序员面试中常见的问题和解答,理解这些知识点对于面试和实际开发都非常关键。

    JAVA程序员面试32问.doc

    【JAVA程序员面试32问详解】 ...这些面试问题覆盖了Java的基础语法、面向对象、集合框架、并发编程等多个方面,是Java程序员面试中常见的考点。理解和掌握这些问题,将有助于提高面试表现和实际编程能力。

    JAVA程序员面试三十二问

    【JAVA程序员面试三十二问详解】 1. **final, finally, finalize的...这些面试问题涵盖了Java的基础语法、面向对象特性、集合框架、并发编程、异常处理等多个方面,深入理解这些问题可以帮助开发者提升Java编程技能。

    JAVA程序员面试32问,你能回答多少题

    【Java程序员面试32问详解】 1. **final, finally, finalize...以上是Java面试中常见的32个问题及其解答,涵盖了基础语法、面向对象、集合框架、并发编程等多个方面。了解这些问题,有助于提升Java程序员的面试表现。

    Java程序员面试题集

    32. **Singleton模式**:Singleton是一种设计模式,保证一个类只有一个实例,并提供全局访问点。 以上是Java面试中常见的知识点,深入理解和掌握这些概念对于成为一名合格的Java程序员至关重要。

    Java 面试中的陷阱

    32. **Singleton模式**:设计模式之一,确保一个类只有一个实例,并提供全局访问点。 理解这些Java面试中的陷阱和知识点,有助于你在面试中展现出扎实的Java基础和问题解决能力。在准备面试时,不仅要知道答案,...

Global site tag (gtag.js) - Google Analytics