当前位置: 首页 > 图灵资讯 > 技术篇> 三种java单例模式概述

三种java单例模式概述

来源:图灵教育
时间:2023-03-28 17:43:21

java语言在应用程序中,一个类Class只存在一个实例,这是由java单例模式实现的。Java单例模式是一种常见的软件设计模式java单例模式有三种:懒汉单例、饿汉单例、登记单例。让我们来介绍一下这三种。java单例模式的相关内容。

java单例模式是一种常见的设计模式它的核心结构只包含一个特殊类别,称为单例系统可以通过单例模式来保证应用该模式的类别只有一个例子,这也是java单例模式的主要作用。单例模式的特点有:(1单个例类只能有一个例子;(2单个例子必须创建自己唯一的例子;(3这个例子必须提供给所有其他对象。

单例模式确保一个类别只有一个例子,并将其自己例子并提供给整个系统。在计算机系统中,线程池、缓存、日志对象、对话框、打印机和图形卡的驱动程序对象通常被设计为单例。这些应用程序或多或少具有资源管理器的功能。每台计算机可以有几台打印机,但只有一台Printer Spooler,为了避免两个打印操作同时输出到打印机中。每台计算机可以有几个通信端口,系统应集中管理这些通信端口,以避免两个请求同时呼叫一个通信端口。简而言之,选择单一的例子模式是为了避免不一致,避免政治多头。

1)java懒汉风格的单例模式:单例模式的懒汉风格反映了缓存的想法。延迟加载意味着不要在一开始就加载资源或数据,并一直在等待。当资源或数据即将使用时,无法避免加载。懒汉风格是定性的时间来改变空间,没有同步的懒汉风格是不安全的线程。如何实现线程安全的懒汉风格(双检锁):

public class Singleton {
	private volatile static Singleton instance = null;
	// 私有化结构方法
	private Singleton() {
	}
	public static Singleton getInstance() {
		if (instance == null) {
			synchronized (Singleton.class) {
				if (instance == null) {
					instance = new Singleton();
				}
			}
		}
		return instance;
	}
 }

2java饿汉风格的单例模式:对于饿汉模式,我们可以这样理解:这个单一的例子非常饿,迫切需要吃东西,所以它在加载类别时立即创建对象。

比较懒惰模式和饥饿模式的优缺点:懒惰模式,其特点是运行速度慢,但加载速度快。它在整个应用程序的生命周期中只占用了一部分资源;饥饿模式,其特点是加载速度慢,但运行速度快,从加载到应用结束。

这两种模式对于初始化快、资源占用少的轻量级对象来说没有太大的性能差异。选择懒汉还是饿汉都没问题。但对于初始化缓慢、占用资源多的重量级对象来说,会有明显的差异。因此,饿汉模式应用于重量级对象,加载速度慢,但运行速度快;懒汉模式相反,加载速度快,但第一次得到对象的速度慢。

3)Java单例模式的注册类型:必要时通过静态内部类创建实例。私有静态内部类写法如下:

public class RegisterSingleton {
    private RegisterSingleton() {
    }
    private static RegisterSingleton getInstance() {
        return Holder.registerSingleton;
    }
    private static class Holder {
      private static final RegisterSingleton registerSingleton = new RegisterSingleton()}
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            new Thread (() -> {
             System.out.println(RegisterSingleton.getInstance ().hashCode ());
        }
    }
}

以上是三种介绍java单例模式,介绍java单例模式实际中的应用,懒汉会涉及线程的并发性。饿汉在实际项目开发中应用较多。单例设计模式GoF23种设它是最常用的设计模式之一,希望各位java程序员可以在未来实际项目开发中,通过设计模式的引导,逐步将设计理念融入到实际项目开发中,提高自己的java编程能力,同时也进一步升华你的编程思想