You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中该Logger类的写法是否符合单例模式?

你的Logger实现不符合单例模式

单例模式的核心要求是:一个类在整个应用生命周期中只能有一个实例,并且每次请求该类的实例时都返回同一个对象。

你提供的代码问题在于:

  • 每次调用Logger(String name)工厂构造方法时,都会创建并返回一个全新的Logger._internal实例
  • 没有任何缓存已创建实例的逻辑,完全做不到“全局唯一”或“同一标识唯一”的实例复用

如果要实现支持按名称区分的单例(即同一名称对应唯一实例),可以修改为带实例缓存的写法:

class Logger {
  // 用Map缓存不同名称的Logger实例
  static final Map<String, Logger> _instanceCache = {};

  factory Logger(String name) {
    // 不存在则创建,存在则返回已有实例
    return _instanceCache.putIfAbsent(name, () => Logger._internal(name));
  }

  Logger._internal(this.name);
  final String name;
}

如果要实现全局唯一的单例(不管参数都返回同一个实例),可以简化为:

class Logger {
  static final Logger _instance = Logger._internal();

  factory Logger() => _instance;

  Logger._internal();
}

内容的提问来源于stack exchange,提问作者sub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:44:49