瞅瞅我的新 Git 课! 嘿!瞅瞅我的新 Git 课! 嘿!GitByBit.com 上有我的新 Git 课,瞅瞅! 嘿!想来点 Git 的爽复习?GitByBit.com 上我的新课,瞅瞅!
单例

Rust 单例模式讲解和代码示例

单例是一种创建型设计模式 让你能够保证一个类只有一个实例 并提供一个访问该实例的全局节点

单例拥有与全局变量相同的优缺点 尽管它们非常有用 但却会破坏代码的模块化特性

在某些其他上下文中 你不能使用依赖于单例的类 你也将必须使用单例类 绝大多数情况下 该限制会在创建单元测试时出现

Rust specifics

By definition, Singleton is a global mutable object. In Rust this is a static mut item. Thus, to avoid all sorts of concurrency issues, the function or block that is either reading or writing to a mutable static variable should be marked as an unsafe block.

For this reason, the Singleton pattern can be percieved as unsafe. However, the pattern is still widely used in practice. A good read-world example of Singleton is a log crate that introduces log!, debug! and other logging macros, which you can use throughout your code after setting up a concrete logger instance, such as env_logger. As we can see, env_logger uses log::set_boxed_logger under the hood, which has an unsafe block to set up a global logger object.

  • In order to provide safe and usable access to a singleton object, introduce an API hiding unsafe blocks under the hood.
  • See the thread about a mutable Singleton on Stackoverflow for more information.

Starting with Rust 1.63, Mutex::new is const, you can use global static Mutex locks without needing lazy initialization. See the Singleton using Mutex example below.

单例在其他编程语言中的实现

C# 单例模式讲解和代码示例 C++ 单例模式讲解和代码示例 Go 单例模式讲解和代码示例 Java 单例模式讲解和代码示例 PHP 单例模式讲解和代码示例 Python 单例模式讲解和代码示例 Ruby 单例模式讲解和代码示例 Swift 单例模式讲解和代码示例 TypeScript 单例模式讲解和代码示例