Android设计模式之单例模式

一、定义:确保一个类只有一个实例,并且自动实例化,并向整个系统提供这个实例。

二、使用场景:避免重复创建对象,过多消耗系统资源。

三、使用方式

        3.1饿汉式:类加载时立即初始化,线程安全,可能会浪费资源。

public class Singleton {
    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {} // 私有构造方法

    public static Singleton getInstance() {
        return INSTANCE;
    }
}

        3.2懒汉式:需要使用实例时才进行初始化,多线程不安全。       

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

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

        3.3双重检查锁,DCL:使用时创建实例,使用双重锁校验,线程安全。

public class Singleton {
    private static volatile Singleton instance;

    private Singleton() {}

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

        3.4静态内部类:使用类加载机制,延迟初始化,线程安全。

public class Singleton {
    private Singleton() {}

    private static class Holder {
        private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance() {
        return Holder.INSTANCE;
    }
}

        3.5枚举单例:简洁、线程安全,且能防止反射和序列化破坏单例。

public enum Singleton {
    INSTANCE;

    public void doSomething() {
        // 功能代码
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/899218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker ssh远程连接

目录 操作命令: 确保 SSH 配置允许 root 登录: docker提交: 操作命令: # 进入容器 docker exec -ti lbg04 /bin/bash# 更新包管理并安装 SSH 服务(Ubuntu/Debian 示例) apt-get update apt-get install…

关于matlab和python谁快的问题

关于matlab和python谁快的问题,python比matlab在乘法上快10倍,指数计算快4倍,加减运算持平,略慢于matlab。或许matlab只适合求解特征值。 import torch import timen 50000 # 矩阵规模 M torch.rand(n, 31)start_time time.t…

准确--配置服务器文件数

某些系统可能在 /etc/security/limits.d/ 目录下有额外配置覆盖全局设置。检查是否存在冲突文件: ls /etc/security/limits.d/如果有文件(如 90-nproc.conf 或 90-nofile.conf),需编辑或删除这些文件中的冲突配置。 确保系统启用…

VectorBT:使用PyTorch+LSTM训练和回测股票模型 进阶一

VectorBT:使用PyTorchLSTM训练和回测股票模型 进阶一 本文介绍了如何使用PyTorch和LSTM模型进行股票数据的训练和回测。涵盖了数据预处理、特征选择、LSTM模型构建、模型训练与验证、动态阈值策略生成交易信号以及使用VectorBT进行回测和绩效分析。 文中内容仅限技术…

mysql中的聚簇索引,什么是聚簇索引和非聚簇索引

文章目录 1. 什么是聚簇索引2. 非聚簇索引3. 聚簇索引的优缺点4. 聚簇索引的使用场景5. 聚簇索引和主键索引的异同前言: 在继续讲解专栏内容之前,先学习几个概念,以便更好了解: 什么是聚簇索引什么是回表这篇文章详细分析 聚簇索引。回表的理解可以进入这篇文章:什么是回表…

MantisBT在Windows10上安装部署详细步骤

MantisBT 是一款基于 Web 的开源缺陷跟踪系统,以下是在 Windows 10 上安装部署 MantisBT 的详细步骤: 1. 安装必要的环境 MantisBT 是一个基于 PHP 的 Web 应用程序,因此需要安装 Web 服务器(如 Apache)、PHP 和数据…

深入理解K8s与Docker的关系:容器化技术的双雄

友情提示:本文内容由银河易创(https://ai.eaigx.com)AI创作平台gpt-4-turbo模型生成,仅供参考。 在现代云计算及微服务架构的发展中,Docker与Kubernetes(K8s)作为两大核心技术,被广泛…

蓝桥与力扣刷题(蓝桥 蓝桥骑士)

题目:小明是蓝桥王国的骑士,他喜欢不断突破自我。 这天蓝桥国王给他安排了 N 个对手,他们的战力值分别为 a1,a2,...,an,且按顺序阻挡在小明的前方。对于这些对手小明可以选择挑战,也可以选择避战。 身为高傲的骑士&a…

如何查看window电脑的GPU信息

GPU(图形处理器,Graphics Processing Unit)和显卡是两个密切相关但不同的概念 概念 1. ‌基本概念‌ ‌GPU‌:是专门用于处理图像和视频信息的微处理器,拥有强大的并行计算能力,主要负责图形渲染、数值分…

26考研——查找_树形查找_二叉排序树(BST)(7)

408答疑 文章目录 三、树形查找二叉排序树(BST)二叉排序树中结点值之间的关系二叉树形查找二叉排序树的查找过程示例 向二叉排序树中插入结点插入过程示例 构造二叉排序树的过程构造示例 二叉排序树中删除结点的操作情况一:被删除结点是叶结点…

【数据库事务、消息队列事务、Redis 事务、Spring 事务 详细分析】

数据库事务、消息队列事务、Redis 事务、Spring 事务** 的详细分析 在分布式系统和应用开发中,事务管理是确保数据一致性和可靠性的关键机制。以下是针对 数据库事务、消息队列事务、Redis 事务、Spring 事务 的详细分析,包括原理、特点、适用场景和对比…

kubectl 命令参数详解与示例

kubectl 命令参数详解与示例 kubectl 是 Kubernetes 的命令行工具,用于与 Kubernetes 集群交互。下面我将详细介绍 kubectl 的主要命令参数,并提供相应的使用示例。 一、基础命令 1. kubectl get - 获取资源信息 常用参数: -n, --namesp…

#vue中解决异步请求的竞态

// composables/useFetchWithoutRace.js import { ref } from vue; import axios from axios;// 定义一个可复用的 Composition 函数,处理带有竞态控制的异步请求 export function useFetchWithoutRace() {// 定义响应式变量 latestRequestId,用于追踪最…

如何在 Postman 中导入和导出 cURL 命令?

cURL 是一款广受欢迎的命令行工具,专门用于执行 HTTP 请求。它在 Web 应用或 API 测试中极为实用,让用户得以借助在 API 开发者社区广为流行的成熟语法,直接通过命令行与 API 进行交互。若你需要在多个环境下运行众多 cURL 命令,可…

用python制作一个贪吃蛇小游戏

文章目录 效果图python源码使用说明效果图 只需要一百多行python代码,就能制作一个贪吃蛇小游戏。效果如下: 操作说明: 你可以使用上下左右箭头键来控制蛇的移动方向。蛇吃到食物后会变长,当蛇撞到墙壁或自己的身体时游戏结束。游戏结束后,你可以按 Q 退出游戏,或按 C…

react 15-16-17-18各版本的核心区别、底层原理及演进逻辑的深度解析

一、React 15(2016) 核心架构:Stack Reconciler(栈协调器) 工作原理: 同步递归渲染:采用深度优先遍历方式递归处理 Virtual DOM,形成不可中断的调用栈渲染流程:1. 触发 …

微信小程序pdf预览

1.示例图 2.代码 fileId:要预览的pdf文件的id viewsFiles(fileId) {wx.showLoading({title: 加载中...});var params {url: "/common/getFile/" fileId ,//后端提供的接口method: "GET",responseType: "arraybuffer",callBack: …

雪花算法生成分布式唯一ID

雪花算法的结构是由时间戳、工作机器ID和序列号构成。要确保全局唯一,必须保证每个节点的机器ID唯一,并且同一毫秒内序列号不重复。在分库分表的环境下使用雪花算法,机器ID的分配是关键。常见的做法是通过分布式系统协调,比如使用…

把手搭建vue前后端管理系统-TAB标签通过pinia来进行管理(二十六)

目标&#xff1a;通过pinia的store来进行组件状态的统一管理&#xff0c;这样大家都可以共用到这个组件的状态信息&#xff0c;就可以实现组件的联动 一、添加侧边栏菜单的点击事件&#xff1a; 1、CommonAside.vue里面添加click的事件 <el-menu-itemv-for"item in …

this(执行上下文)

&#x1f6a9; 这个专栏是一个 JS 进阶系列&#xff0c;当前内容为 JS 执行机制&#xff0c;建议按顺序阅读 执行上下文&作用域 词法环境&变量环境 this&#xff08;上下文对象&#xff09; &#x1f539; 概述 &#x1f30d; 前提概要&#xff1a; 在上文 执行上下文&…