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
相关产品推荐
相关产品推荐

