`

设计模式之单例模式(饿汉式、懒汉式)

阅读更多

摘要:单例模式是一种常见的设计模式。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数, 有利于Java垃圾回收(garbage collection)。

 

一、单例模式也是一种比较常见的设计模式,它到底能带给我们什么好处呢?其实无非是三个方面的作用:

     1、控制资源的使用,通过线程同步来控制资源的并发访问;

     2、控制实例产生的数量,达到节约资源的目的。

     3、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。

 

二、常见的单例模式有两种:懒汉式单例、饿汉式单例。

    单例模式有以下特点:

    1、单例类只能有一个实例。

    2、单例类必须自己创建自己的唯一实例。

    3、单例类必须给所有其他对象提供这一实例。

 

     1)饿汉式单例

      在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。

 

package com.zad.my_encapsulation_single;

/**
 * 单例模式-饿汉式
 * 1、构造器私有化
 * 2、提供私有的静态属性 ,创建该对象
 * 3、提供公共的静态方法来访问该引用
 * @author zhongaidong
 */
public class EagerSingleton {
	// 2、提供私有的静态属性,在类加载的时候就创建该单例对象
    private static EagerSingleton eager = new EagerSingleton();
 
    // 1、构造器私有化,内部创建对象,避免外部创建实例
    private EagerSingleton() {
    }
 
    // 3、提供公共的静态方法来访问该引用,返回此类的唯一实例.
    public static EagerSingleton getInstance() {
        return eager;
    }
}

 

2)懒汉式单例

 

        在类被加载的时候,唯一实例已经被创建。这个设计模式在Java中容易实现,在别的语言中难以实现。

/**
 * 单例模式-懒汉式
 * 1、构造器私有化
 * 2、提供私有的静态属性 
 * 3、提供公共的静态方法来访问该引用
 * @author zhongaidong
 */
public class LazySingleton {
	// 2、提供私有的静态属性,加载时候不做初始化
	private static LazySingleton lazy;

	// 1、构造器私有化,内部创建对象,避免外部创建实例
	private LazySingleton() {
	}

	// 3、提供公共的静态方法来访问该引用。
	public static LazySingleton getInstance() {
		if (lazy == null) {
			lazy = new LazySingleton();
		}
		return lazy;
	}
}

 

三、如何使用单例对象

/**
 * 如何使用单例对象。
 * 
 * @author zhongaidong
 */
public class App {

	public static void main(String[] args) {

		// EagerSingleton eager =new EagerSingleton();  // 不能这样调用。
		EagerSingleton eager = EagerSingleton.getInstance();
		System.out.println(eager);
		System.out.println(EagerSingleton.getInstance());

		LazySingleton lazy = LazySingleton.getInstance();
		System.out.println(lazy);
		System.out.println(LazySingleton.getInstance());
	}
}

 

分享到:
评论

相关推荐

    设计模式——单例模式

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

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

    单例设计模式又分为两种方式,懒汉式和饿汉式。 懒汉式单例 懒汉式单例模式是指只有当调用getInstance的时候,才会初始化这个单例。这种方法可以保证线程安全,又减轻了资源加载和性能上的负担。下面是一个懒汉式...

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

    单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在Java或类似的面向对象编程语言中,单例模式常用于管理共享资源,如数据库连接池、线程池或者配置文件等。在这个...

    C++单例模式懒汉式和饿汉式

    在软件设计模式中,单例模式是一种常用的模式,它的核心思想是确保一个类在整个系统中只有一个实例,并提供一个全局访问点。这样的设计可以避免过多的实例化,减少资源的浪费,尤其是在需要频繁交互或者共享资源的...

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

    单例模式是设计模式中的一种常见模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。在软件工程中,这种模式常用于控制资源的消耗,比如数据库连接、线程池等,避免频繁创建和销毁对象带来的性能开销...

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

    单例设计模式又分为两种方式,懒汉式和饿汉式。 懒汉式单例是一种延迟加载的单例模式,它只有当调用 getInstance 的时候,才会初始化这个单例。这种模式的优点是可以减少资源的加载和性能上的负担,但是它需要使用 ...

    Java设计模式之单例模式实例详解【懒汉式与饿汉式】

    Java设计模式之单例模式实例详解【懒汉式与饿汉式】 单例模式是Java设计模式中的一种,主要用于控制对象的实例化,确保整个应用程序中只有一个对象实例,并提供了一个全局的访问点。单例模式的主要优点是能够避免...

    java单例设计模式-饿汉式-懒汉式 (2).docx

    单例设计模式是一种常用的设计模式,其主要目的是确保一个类只有一个实例,并且提供一个全局访问点。这种模式在Java中有两种常见的实现方式:饿汉式和懒汉式。 1. 饿汉式单例: 饿汉式单例在类加载时就完成了初始化...

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

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

    Java设计模式之单例模式的七种写法

    Java设计模式之单例模式的七种写法 单例模式是一种常见的设计模式,它确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机的驱动程序对象常...

    java单例设计模式-饿汉式-懒汉式 (2).pdf

    饿汉式单例设计模式 饿汉式在类加载时即创建单例对象,因此在类加载阶段就已经完成了初始化。由于类加载是线程安全的,所以饿汉式天生就是线程安全的。它的实现代码如下: ```java public class Singleton { ...

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

    单例模式的核心在于控制类的实例化过程,常见的实现方式有懒汉式、饿汉式和双重检查锁定(DCL)等。懒汉式是在类被加载时并不创建实例,而是在第一次调用getInstance方法时才创建;饿汉式则是在类加载时就创建实例,...

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

    总的来说,单例模式是一种常见的设计模式,懒汉式单例模式则是其中一种实现策略,它的主要特点是延迟加载和线程安全。在选择单例模式实现时,开发者需要根据具体需求考虑性能、线程安全以及代码简洁性等因素。

    java单例设计模式-饿汉式-懒汉式.pdf

    Java 单例设计模式主要分为两种实现方式:饿汉式和懒汉式。这两种方式都是为了确保一个类只有一个实例,并且提供全局访问点。 **饿汉式**: 饿汉式单例在类加载时就完成了实例化,因此是静态常量的方式,确保了线程...

    java单例设计模式-饿汉式-懒汉式[归纳].pdf

    总结,Java单例设计模式通过饿汉式和懒汉式实现,饿汉式在类加载时创建实例,适用于不需要延迟加载的情况;懒汉式在首次调用时创建,但在多线程环境下需要额外的同步措施以保证线程安全。在实际应用中,应根据具体...

    23钟设计模式之单例模式

    单例模式有多种实现方式,常见的包括懒汉式、饿汉式以及双重检查锁定(DCL)等。 1. 懒汉式:懒汉式是在第一次使用时才创建单例对象,以延迟加载提高效率。但是,如果在多线程环境下,没有正确处理同步问题,可能...

    java单例设计模式-饿汉式-懒汉式.docx

    在Java中,单例模式通常有两种实现方式:饿汉式和懒汉式。 1. 饿汉式: 饿汉式是在类加载时就完成了初始化,因此它是线程安全的。代码如下: ```java public class Singleton { private static final Singleton ...

    设计模式之单例模式和工厂模式

    细心整合和单例模式和工厂模式的几种模型,懒汉式,饿汉式,如何并发操作模式,等都有详细讲解

    java单例设计模式-饿汉式-懒汉式[参照].pdf

    单例设计模式是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。在Java中,单例模式有两种常见的实现方式:饿汉式和懒汉式。 1. **饿汉式**: 饿汉式单例在类加载时即创建了...

    设计模式经典案例之单例模式

    单例模式主要有懒汉式和饿汉式两种实现,饿汉式不会有线程安全的问题,但是提前构造对象占用了一定的资源,如果对内存要求较低的场景可以使用饿汉式实现;懒汉式应使用DCL机制来避免多线程竞争资源的问题,并且懒汉...

Global site tag (gtag.js) - Google Analytics