半单例

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)”对象,需要确保对于同一个主题(subject),同一时间只有一个操作在运行。这个主题将作为半单例的键(key)。当操作被实例化时,如果对于给定的主题已经有一个操作正在进行中,则会返回已经存在的操作,否则会创建一个新的操作。

鸣谢

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