当前位置: 首页 > news >正文

小谈静态类和单例模式

静态类(Static Class)和单例(Singleton)都是在编程中用于实现特定类型的设计模式或代码组织方式。它们在不同的情境下有不同的用途和特点。

静态类(Static Class)

静态类是一种类,它的方法和属性都是静态的,意味着它们可以在不创建类实例的情况下直接访问。静态类常常用于实现一组相关的静态方法,通常用于组织工具方法或者辅助功能,而不需要维护实例状态。静态类在许多编程语言中都有类似的实现方式。

使用场景

  • 提供一组通用的工具函数。
  • 实现一些不需要状态的辅助功能。
  • 在代码中的各处调用相同的方法,而不必实例化类。

伪代码示例

static class MathUtils {static int add(int a, int b) {return a + b;}static int subtract(int a, int b) {return a - b;}
}

单例(Singleton)

单例是一种创建模式,它确保一个类只有一个实例,并提供全局访问点来访问该实例。单例常用于需要共享状态和数据的情况,以确保整个应用程序中只有一个实例存在。

使用场景

  • 管理全局资源,例如日志记录器、配置管理器等。
  • 控制特定资源的访问,以避免多个实例引发冲突。
  • 维护一个共享状态,例如用户登录状态。

伪代码示例

class Singleton {private static Singleton instance;private int counter = 0;private Singleton() {// 私有构造函数,防止外部实例化}static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}int getCounter() {return counter;}void incrementCounter() {counter++;}
}

区别

  1. 多实例 vs 单实例: 静态类没有实例,其所有方法和属性都是静态的,不需要实例化。而单例类有一个唯一的实例,通过该实例访问其方法和属性。
  2. 状态维护: 静态类不维护任何实例状态,而单例可以维护状态并在应用程序中共享。
  3. 可扩展性: 静态类通常不能扩展,因为其方法是静态的。单例类可以实现接口、继承或者使用其他方式进行扩展。
  4. 全局访问: 单例类通常用于提供全局访问点,以便在整个应用程序中共享状态。静态类的方法也可以通过类名直接访问,但没有单例类提供的灵活性和可控性。

静态类适用于不需要维护状态的情况,而单例适用于需要共享状态和资源的情况。选择使用哪种方式取决于你的应用程序的需求和设计目标。

http://www.lryc.cn/news/145958.html

相关文章:

  • ​LeetCode解法汇总823. 带因子的二叉树
  • TypeScript的变量声明的各种方式
  • c++ lambda
  • 泊松回归和地理加权泊松回归
  • 【数学建模竞赛】各类题型及解题方案
  • 【12期】谈一谈redis两种持久化机制的区别?
  • Lambda 编程(Kotlin)一
  • 网络字节序——TCP接口及其实现简单TCP服务器
  • RxJS如何根据事件创建Observable对象?
  • 网站常见安全漏洞 | 青训营
  • vue2使用 vis-network 和 vue-vis-network 插件封装一个公用的关联关系图
  • 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。
  • java-初识Servlet,Tomcat,JDBC
  • SpringBoot+mybatis+pgsql多个数据源配置
  • 视频汇聚/视频监控管理平台EasyCVR接入海康SDK协议后无法播放该如何解决?
  • MQ消息队列(主要介绍RabbitMQ)
  • 2023年7月天猫糕点市场数据分析(天猫数据怎么看)
  • 开源双语对话语言模型 ChatGLM-6B 本地私有化部署
  • Zabbix 5.0 媒体介质 邮箱配置例子
  • 基于Red Hat Enterprise Linux 7操作系统的PostgresSql15的备份恢复(实践笔记)
  • AMEYA360:类比半导体推出小尺寸低功耗仪表放大器INA103和INA104
  • 【Ubuntu20.04】安装gcc11 g++11, Ubuntu18.04
  • vim系列之常用命令
  • Scikit-Learn中的特征选择和特征提取详解
  • Python之动态规划
  • [ES]二基础 |
  • vscode vue3自定义自动补全
  • Spring Cloud + Spring Boot 项目搭建结构层次示例讲解
  • 使用cgroup工具对服务器某些/全部用户进行计算资源限制
  • C#获取DataTable的前N行数据然后按指定字段排序