半单例

Platforms SPM compatible License happn

什么是半单例?

你们都知道单例模式。半单例是一个对象,它会根据给定的 id 是否已存在内存中的实例,返回已存在的实例或新的实例。

这是一个半单例对象的生命周期示例

在代码中,半单例是任何符合 SemiSingletonSemiSingletonWithFallibleInit 协议的对象。

如何使用半单例?

/* First you need a “Store” that will hold the reference to the existing semi-singletons. */
let semiSingletonStore = SemiSingletonStore(forceClassInKeys: true)
/* To retrieve a semi-singleton instance, you ask the store to give you one. */
let s: MySemiSingleton = semiSingletonStore.semiSingleton(forKey: key)

使用场景

例如,“Action”对象,当需要注意同一主题在同一时间只能运行一个动作时。该主题将是半单例的键。当 action 被实例化时,如果给定的主题已经有一个 action 正在进行中,则返回已经存在的 action,否则创建一个新的 action。

致谢

此项目最初由 François Lamboleyhappn 工作期间创建。