4

我想问一下让一个类创建 self 实例是否是一种好习惯,例如我有一个类:

class MyClass {
    private $data = "";
    private $children = array();

    public function add() {
        $x = new MyClass();
        // do something
        // $x->some_method('');
        $this->children[] = $x;
    }

    public function children() {
        return $this->children;
    }
}

这样我可以使用一些 Tree 功能,但是可以吗,还是我必须做一些不同的事情?

例如创建一个父类A,具有B类的孩子,并在A类中使用多维数组来存储孩子?

也许有人可以建议另一种方法来做到这一点?

如果有人有这方面的经验,请他提供他注意到的利弊。

4

3 回答 3

4

让类创建 self 实例是一种好习惯吗?

这取决于你为什么这样做。

如果您因为将其用作单例而使该类创建其自身的实例,那么您通常会与一些人对单例设计模式陷入困境。

另一方面,我发现以工厂设计模式为目的的自我实例化很精致。我确实建议针对这种特殊情况这样做。

于 2012-07-11T18:26:20.847 回答
1

一般来说,我不会。我唯一能看到这是合适的情况是你在 Singleton 中使用它,但情况似乎并非如此。

这里有一篇关于构造函数最佳实践的文章。它非常激烈,但充满了很好的信息!

于 2012-07-11T18:29:24.560 回答
1

无论哪种方式,我都不认为这是一个硬性规定。这取决于您要解决的问题空间。

也就是说,如果您正在创建像树这样的结构,并且该结构包含树类型的节点,那么根据主题应用程序中树的要求,树创建自身的实例可能是完全合理的。

您还会看到与 Singleton 设计模式中的示例大致相似的内容,您希望在其中创建对象的一个​​通用实例。

所以,我认为答案在于解决问题的适用性。希望这是有道理的。

于 2012-07-11T18:29:53.043 回答