有时当我查看其他人编写的代码时,我会看到如下内容:
<?php
namespace sys\database;
class Statistics {
public function __construct() {
// Database statistics are gathered here using
// private methods of the class and then set to
// class properties
}
public static function getInstance() {
return new \sys\database\Statistics();
}
// ...
}
因此静态函数getInstance()
只返回它所属的类的对象。然后,在我遇到的代码中的其他地方:
$stats = \sys\database\Statistics::getInstance();
只需将$stats
设置为Statistics
对象的实例,就可以访问其类属性以获取各种数据库统计信息。
我想知道为什么这样做而不是仅使用$stats = new \sys\database\Statistics();
。在一天结束时,收集统计信息的所有逻辑都在构造函数中,getInstance()
方法除了返回新对象之外不会执行任何操作。
这里有什么我想念的吗?
答案 0 :(得分:4)
这应该是Singleton模式的实现:http://www.oodesign.com/singleton-pattern.html
该模式用于永远不允许创建多个类的实例。
但是,您提供的实现存在一些缺陷:构造函数应该是私有的,并且应该有一个类的私有静态实例,每次调用getInstance
方法时都会返回。 / p>
答案 1 :(得分:2)
这应该是Singleton模式的一个实现,它是一个术语,用于描述一个只能在运行时存在一次的类。
看来你的实施是有缺陷的,因为:
答案 2 :(得分:0)
这是Singleton pattern的[不好]实现。
根据经验,你应该避免使用这种模式,例如更方便Dependency Injection。