在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;
}
}
(2)java饿汉风格的单例模式:对于饿汉模式,我们可以这样理解:这个单一的例子非常饿,迫切需要吃东西,所以它在加载类别时立即创建对象。
比较懒惰模式和饥饿模式的优缺点:懒惰模式,其特点是运行速度慢,但加载速度快。它在整个应用程序的生命周期中只占用了一部分资源;饥饿模式,其特点是加载速度慢,但运行速度快,从加载到应用结束。
这两种模式对于初始化快、资源占用少的轻量级对象来说没有太大的性能差异。选择懒汉还是饿汉都没问题。但对于初始化缓慢、占用资源多的重量级对象来说,会有明显的差异。因此,饿汉模式应用于重量级对象,加载速度慢,但运行速度快;懒汉模式相反,加载速度快,但第一次得到对象的速度慢。
(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单例模式实际中的应用,懒汉会涉及线程的并发性。饿汉在实际项目开发中应用较多。单例设计模式是GoF中23种设它是最常用的设计模式之一,希望各位java程序员可以在未来实际项目开发中,通过设计模式的引导,逐步将设计理念融入到实际项目开发中,提高自己的java编程能力,同时也进一步升华你的编程思想。