Singleton和Registry设计模式之间有什么区别

时间:2013-05-24 22:20:58

标签: php design-patterns model-view-controller

我两者之间有些混淆。


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

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

他们之间有什么区别?

4 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:2)

注册表的不同之处在于其主要目的是允许您导航到关联的对象。请参阅Martin Fowler

答案 2 :(得分:1)

注册表定义:当您想要查找对象时,通常从另一个与其关联的对象开始,并使用该关联导航到该对象。因此,如果要查找客户的所有订单,请从客户对象开始,并使用方法获取订单。但是,在某些情况下,您将无法使用适当的对象。您可能知道客户的ID号但没有参考。在这种情况下,你需要某种查找方法 - 查找程序 - 但问题仍然存在:你如何找到查找器?

注册表本质上是一个全局对象,或者至少它看起来像一个 - 即使它不像appear那样全局。

Singleton定义:有时一个类只有一个实例很重要。例如,在系统中应该只有一个窗口管理器(或只有一个文件系统或只有一个打印假脱机程序)。通常,单身人士用于集中管理内部或外部资源,并提供themselves的全球访问点。

根据这些定义,它们的用法完全不同。

答案 3 :(得分:1)

注册表和单例之间的主要区别在于单例允许我们一次创建一个类的单个实例,而注册表允许我们创建同一类的多个实例。