java编程创建型设计模式单例模式的七种示例

yizhihongxing

首先,我们需要了解什么是设计模式。设计模式是软件开发过程中对常见问题的反复实践和总结,是一套经过验证的、反复使用的具有普遍适用性的解决方案。在Java编程中,单例模式是最为常见的设计模式之一。

单例模式的定义

单例模式是一种创建型设计模式,它能够保证一个类在任何情况下都只有一个实例,并提供了一个访问该实例的全局访问点。

单例模式的优点和适用场景

单例模式具有以下一些优点:
1. 只有一个实例存在,避免了创建大量的对象,减少了内存的开销。
2. 提供一个全局访问点,方便了对象的访问和管理。
3. 提供对唯一实例的受控访问。

单例模式适用于以下场景:
1. 在整个系统中,某个类只需要存在一个实例时。
2. 对象需要被频繁创建和销毁时,会带来不必要的系统开销。

下面介绍七种Java编程实现单例模型的示例,其中包含两个实例说明。

1. 饿汉式单例模式

饿汉式单例模式在类加载时就创建了对象。

public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton() {}
    public static Singleton getInstance() {
        return instance;
    }
}

2. 懒汉式单例模式

懒汉式单例模式指的是在需要时才创建对象,避免了无谓的开销。

public class Singleton {
    private static Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

3. 双检锁/双重校验锁单例模式

双检锁/双重校验锁单例模式在懒汉式单例模式的基础上增加了线程安全。

public class Singleton {
    private volatile static Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

4. 枚举式单例模式

枚举式单例模式是Java中最简单的单例模式实现方式。

public enum Singleton {
    INSTANCE;
    public void whateverMethod() {}
}

5. 静态内部类单例模式

静态内部类单例模式在需要时才进行初始化,且线程安全。

public class Singleton {
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }
    private Singleton() {}
    public static final Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

6. 单元素枚举式单例模式

JDK1.5之后,Java提供了使用单元素枚举类型来实现单例模式。

public enum Singleton {
    INSTANCE;
    public void whateverMethod() {}
}

7. ThreadLocal单例模式

ThreadLocal单例模式使用ThreadLocal来保证线程安全。

public class Singleton {
    private static final ThreadLocal<Singleton> threadLocal = new ThreadLocal<Singleton>() {
        @Override
        protected Singleton initialValue() {
            return new Singleton();
        }
    };

    private Singleton() {}

    public static Singleton getInstance() {
        return threadLocal.get();
    }
}

以上是七种Java编程实现单例模式的示例。在实际开发中,我们可以根据需求选择最适合的单例模式示例来编写程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java编程创建型设计模式单例模式的七种示例 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • CAD文档怎么快速自定义图纸标题栏?

    当需要快速生成CAD图纸时,自定义图纸标题栏可以帮助我们节省时间和提高工作效率。下面是具体的操作步骤和示例说明: 1. 打开CAD文档 首先,双击打开你需要进行自定义标题栏的CAD文档。 2. 制作自定义标题栏 接下来,我们需要进行自定义标题栏的制作。具体步骤如下: 2.1 新建一个图层 我们需要新建一个图层并将其命名为Title Bar。 LA //输入L…

    other 2023年6月25日
    00
  • ios中关于taptic-engine震动反馈的深入解析

    以下是iOS中关于Taptic Engine震动反馈的深入解析的完整攻略: Taptic Engine简介 Taptic Engine是苹果公司在iPhone 7及以后的设备中引入的一种震动反馈技术。使用线性马达来产生不同类型的震动反馈,包括轻触、重击、弹跳等。Taptic Engine可以用于各种应用程序,包括游戏、通知、用户界面等。 Taptic Eng…

    other 2023年5月8日
    00
  • CentOS7下python3.7.0安装教程

    下面我给您讲一下在CentOS7下安装Python3.7.0的完整攻略。 步骤一:安装必要的软件包 在安装Python3.7.0之前,我们需要先安装一些必要的软件包,包括开发工具和相关的库文件。可以通过以下命令进行安装: sudo yum groupinstall -y "Development Tools" sudo yum insta…

    other 2023年6月26日
    00
  • centos7安装搭建ftp服务器(最简便方法)

    CentOS7安装搭建FTP服务器(最简便方法) FTP(File Transfer Protocol),即文件传输协议,是在计算机之间进行文件传输的一套标准,早期是互联网上用于文件传输的主要协议之一。在本文中,我们将介绍如何在CentOS7操作系统上使用最简便的方法来安装和搭建FTP服务器。 环境准备 在开始安装FTP服务器之前,需要准备以下环境: 一台安…

    其他 2023年3月28日
    00
  • Vue.js自定义指令的用法与实例解析

    下面是Vue.js自定义指令的用法与实例解析的完整攻略。 自定义指令的概念 在Vue.js中,我们可以通过自定义指令来扩展Vue.js的功能。自定义指令实际上就是一个指令函数,它可以接收三个参数:el, binding, vnode。 其中,el表示指令所绑定的元素,binding是一个对象,包含指令的相关信息,vnode表示Vue编译生成的虚拟节点。 自定…

    other 2023年6月25日
    00
  • Android实现系统重新启动的功能

    Android实现系统重新启动的功能攻略 在 Android 应用中实现系统重新启动的功能,主要可以通过两种方式实现: 通过发送 ACTION_REBOOT 广播实现系统重新启动。 通过 su 的命令执行 /system/bin/reboot 实现系统重新启动。 以下是具体操作步骤和示例说明。 1. 通过发送 ACTION_REBOOT 广播实现系统重新启动…

    other 2023年6月27日
    00
  • ExtJS4 表格的嵌套 rowExpander应用

    { id: 1, name: ‘John Doe’, email: ‘john@example.com’, phone: ‘1234567890’, address: ‘123 Main St’ }, { id: 2, name: ‘Jane Smith’, email: ‘jane@example.com’, phone: ‘0987654321’, ad…

    other 2023年7月28日
    00
  • Java线程优先级变量及功能

    Java线程优先级变量及功能攻略 1. 什么是线程优先级 在Java中,每个线程都有一个优先级,用来确定线程在竞争资源时的调度顺序。线程优先级的范围是1到10,默认值为5。较高优先级的线程在竞争资源时有更大的机会被调度执行,但是并不能保证绝对的执行顺序。 2. 设置线程优先级 Java线程优先级的设置可以通过setPriority()方法实现。该方法接受一个…

    other 2023年6月28日
    00
合作推广
合作推广
分享本页
返回顶部