单例和注册表设计模式之间有什么区别

我在这两种模式之间有一些混淆:

单例
检查实例是否存在 返回它,或创建一个新实例。

注册表
检查实例是否存在,请返回它,或者创建一个新实例并存储它。

它们之间有什么区别?


答案 1

两者都与实例控制有关。不同之处在于,Singleton 只允许给定类的一个实例,而 Registry 则持有 1-1 个实例的键映射。通常,键是(或表示)一个类,值是该类的实例。

例如,Code Igniter 框架保存一个注册表,其中包含您加载的每个库/模型/控制器/帮助程序的实例,并且每次都返回这些相同的实例。


答案 2

注册表的不同之处在于,其主要用途是允许您导航到关联的对象。参见马丁·福勒


推荐