`
Just-Do-it
  • 浏览: 29681 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

Singleton 单例模式(懒汉方式和饿汉方式)

 
阅读更多
单例模式的概念:

单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。


关键点:

1)一个类只有一个实例       这是最基本的

2)它必须自行创建这个实例

3)它必须自行向整个系统提供这个实例

----------------------------------------------------------------------------------------------------------------------------------------------------


两种实现方式:


1  懒汉模式(类加载时不初始化)


复制代码

package Singleton;

public class LazySingleton {
    //懒汉式单例模式
    //比较懒,在类加载时,不创建实例,因此类加载速度快,但运行时获取对象的速度慢
   
   
    private static LazySingleton intance = null;//静态私用成员,没有初始化
   
    private LazySingleton()
    {
        //私有构造函数
    }
   
    public static synchronized LazySingleton getInstance()    //静态,同步,公开访问点
    {
        if(intance == null)
        {
            intance = new LazySingleton();
        }
        return intance;
    }
}

复制代码


关键点:(代码注释上已给出)

1)构造函数定义为私有----不能在别的类中来获取该类的对象,只能在类自身中得到自己的对象

2)成员变量为static的,没有初始化----类加载快,但访问类的唯一实例慢,static保证在自身类中获取自身对象

3)公开访问点getInstance: public和synchronized的-----public保证对外公开,同步保证多线程时的正确性(因为类变量不是在加载时初始化的)

优缺点见代码注释。




2  饿汉式单例模式(在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快)


复制代码

package Singleton;

public class EagerSingleton {
    //饿汉单例模式
    //在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快
   
    private static EagerSingleton instance = new EagerSingleton();//静态私有成员,已初始化
   
    private EagerSingleton()
    {
        //私有构造函数
    }
   
    public static EagerSingleton getInstance()    //静态,不用同步(类加载时已初始化,不会有多线程的问题)
    {
        return instance;
    }
   
   
}

复制代码


关键点:(代码注释已写)

1)私有构造函数

2)静态私有成员--在类加载时已初始化

3)公开访问点getInstance-----不需要同步,因为在类加载时已经初始化完毕,也不需要判断null,直接返回

优缺点见代码注释。
分享到:
评论

相关推荐

    QT_C++单例模式懒汉+饿汉.rar

    "QT_C++单例模式懒汉+饿汉.rar"是一个压缩包,包含了关于C++在QT环境下实现单例模式的实例,分为懒汉式和饿汉式两种实现方式。 首先,我们来看一下单例模式的基本原理。单例模式通常用于那些需要频繁实例化然后销毁...

    单例模式(懒汉式,饿汉式)

    单例模式有两种常见的实现方式:懒汉式和饿汉式。 ### 懒汉式单例 懒汉式单例,顾名思义,是一种延迟初始化的单例模式,即在第一次调用时才创建实例。这种方式的优点是在需要的时候才创建对象,节省了内存资源;...

    单例模式,懒汉模式和饿汉模式

    单例模式有多种实现方式,其中最常见的是懒汉模式和饿汉模式。 **懒汉模式** 是指在第一次需要时才创建单例对象,延迟了初始化的时间,因此称为“懒汉”。懒汉模式的主要优点是如果单例对象始终未被使用,那么就...

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

    在这个场景中,我们将探讨如何使用单例模式来创建一个学生管理系统,主要涉及“饿汉式”和“懒汉式”两种实现方式。 **饿汉式单例** 饿汉式单例在类加载时就完成了实例化,因此它是线程安全的。这种方式保证了单例...

    singleton单例模式1

    "singleton单例模式1" 单例设计模式是软件设计模式中的一种,目的是确保某个类只能有一个实例,并提供一个全局的访问点来访问这个实例。 首先,单例模式的要点是:① 某个类只能有一个实例。构造器私有化。② 它...

    Singleton单例模式.zip

    本资料包“Singleton单例模式.zip”提供的是C#实现单例模式的源代码示例。 单例模式的核心在于限制类的构造函数访问,防止外部代码随意创建实例。通常,我们通过以下几种方式来实现C#中的单例模式: 1. 饿汉式...

    java Singleton单例模式

    Java中的Singleton(单例模式)是一种常用的软件设计模式,它保证了类只有一个实例,并提供一个全局访问点。这种模式在需要频繁创建和销毁对象的场景中特别有用,因为它可以节省系统资源,例如数据库连接或者线程池...

    单例模式(饿汉模式、懒汉模式、DCL单例模式、枚举)

    本文将详细讨论四种常见的单例实现方式:饿汉模式、懒汉模式、双重检查锁定(DCL)单例模式以及枚举单例。 1. **饿汉模式**: 饿汉模式是在类加载时就完成了实例化,避免了线程同步问题。这种方式简单且安全,但...

    Singleton 单例模式的介绍以及解析

    单例模式的核心在于限制类的实例化,通常通过私有化构造函数和静态工厂方法来实现。当类的实例第一次被请求时,会创建一个对象并将其存储在一个静态变量中,后续的请求都会返回这个已经创建的对象,而不是创建新的...

    设计模式——单例模式

    实现单例模式主要有两种方式:饿汉式和懒汉式。 ### **饿汉式单例模式** 饿汉式单例模式在类加载时就完成了实例化,因此也称为静态初始化。这种方式保证了线程安全,但可能会造成不必要的资源浪费,因为即使未使用...

    设计模式——单例模式(懒汉模式)

    除了DCL之外,还有一种饿汉式单例模式,它在类加载时就完成了实例化,虽然牺牲了懒加载的特性,但提供了更高的效率和线程安全性。不过,对于那些不需要立即加载且生命周期较长的单例对象,懒汉式更加适用。 在实际...

    老生常谈C++的单例模式与线程安全单例模式(懒汉/饿汉)

    本文将讨论两种常见的单例实现方式:懒汉式和饿汉式,以及它们的线程安全问题。 1. 教科书中的单例模式 经典的单例模式实现通常包括以下几个关键点: - 构造函数设为私有(private)以防止外部直接创建实例。 - ...

    大话设计模式--Singleton(单例模式)

    本文将深入探讨单例模式的概念、作用、实现方式以及其在实际编程中的应用。 单例模式的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这种模式主要用于控制类的实例化过程,防止因为多个实例导致的资源...

    Singleton pattern单例模式应用

    除了上述提到的饿汉式和懒汉式单例模式外,还有其他几种实现方式,如枚举单例、内部类单例等,每种方式都有其适用场景和优劣。 #### 结论 单例模式作为软件工程中的一种基本设计模式,其核心在于控制类的实例化...

    Singleton 单例模式

    Singleton 单例模式是软件设计模式中的一种,它限制了类的实例化过程,确保一个类在整个系统中只有一个实例存在。这种模式常用于系统资源管理,比如数据库连接、线程池或者缓存服务等,因为这些资源往往需要全局共享...

    java 单例模式(饿汉模式与懒汉模式).docx

    单例模式有两种常见的实现方式:饿汉模式和懒汉模式。 1. **饿汉模式**: - 饿汉模式的特点是在类加载时就完成了初始化,因此线程安全。它的实现方式是通过静态常量或者静态代码块来立即创建单例对象。 ```java ...

    C#单例模式详解 C#单例模式详解C#单例模式详解

    - 控制实例化过程:可以控制实例的创建时机和方式,比如在特定条件下初始化。 然而,单例模式也有一些缺点: - 打破了单一职责原则,因为单例类不仅要处理业务逻辑,还要管理自己的实例化。 - 单例模式难以进行单元...

    设计模式之单例模式源码demo

    3. **双重检查锁定(DCL,Double Check Locking)单例模式**:结合了饿汉模式和懒汉模式的优点,既延迟了初始化,又保证了线程安全。在多线程环境下,只有在`instance`为`null`时才会进入同步块,避免了不必要的同步...

    singleton单例最全实现方式代码.rar

    本压缩包提供了多种单例实现方式的Java代码示例,包括常见的懒汉式、饿汉式、双重检查锁定、静态内部类和枚举等方式。下面将详细解释这些实现方法。 1. **饿汉式(静态常量)** 饿汉式单例在类加载时就初始化,...

Global site tag (gtag.js) - Google Analytics