1

如果一个使用自动加载功能(带spl_autoload_register),并一个需要了:单,工厂,自动加载

  • 单:所有需要的类会被自动加载反正被加载,包括数据库,日志,R & R,所以需要“永远在线”等对象不清楚
  • 工厂:再次,自动加载器将加载所需的类,所以有一点使用工厂类来实例化工作类实现接口,或扩展抽象

回答

1

单例用于保存特定类的单个实例,因此无论何时检索实例,它都将保持不变。因此,设置数据意味着数据在检索时始终保持不变。

这与自动加载类不同,因为每次创建新实例时都会将状态重置为类的默认值。尽管如此,单身人士应该谨慎使用,因为他们基本上是荣耀的全球变数。

工厂模式应该用于委托确定和创建对象。当你不想指定一个具体的类,但是在一组条件下需要一个特定的子类时,它会被使用。您不能将构造参数传递给自动加载器,并且可能需要一些复杂的逻辑来确定应从工厂返回哪个对象,因此再次达不到相同的效果。

一个自动加载器应该只是用来找到一个类文件并包含它。它不应该(也不能)执行任何逻辑,例如实例化对象或决定加载哪个对象。

+0

乔纳森......工厂:有道理; Singleton:我有问题的理解,为什么重新创建实例对DB不好 - 单例真的很重要吗? – Jeffz 2012-03-12 17:04:08

+0

单例的例子可能是数据库连接对象,以强制一次只存在一个连接。其他示例可以是保存在应用程序中任何地方都可访问的配置数据 - 例如将命令行参数加载到名为'Config'的单例中,并通过'Config :: read($ name)'来访问它们。 – 2012-03-12 17:14:19

+0

有道理。如果我愿意,还有一个问题。是否有必要从自动加载器中排除单身人士,因为他们是静态实例化的? – Jeffz 2012-03-12 17:21:14