单例是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。
单例拥有与全局变量相同的优缺点。 尽管它们非常有用, 但却会破坏代码的模块化特性。
在某些其他上下文中, 你不能使用依赖于单例的类。 你也将必须使用单例类。 绝大多数情况下, 该限制会在创建单元测试时出现。
概念示例
本例说明了单例设计模式的结构并重点回答了下面的问题:
- 它由哪些类组成?
- 这些类扮演了哪些角色?
- 模式中的各个元素会以何种方式相互关联?
了解该模式的结构后, 你可以更容易地理解下面基于真实世界的 PHP 应用案例。
index.php: 概念示例
Output.txt: 执行结果
真实世界示例
单例模式由于限制了代码复用, 且让单元测试复杂化而名声不佳。 但它在有些情况下仍然非常实用, 特别是在需要控制一些共享资源时十分方便。 例如, 全局日志对象必须对日志文件的访问权限进行控制。 另一个例子: 共享的运行时配置存储。
index.php: 真实世界示例
Output.txt: 执行结果