什么时候在OOP中使用单身人士?

时间:2016-12-20 18:48:43

标签: oop design-patterns singleton

在阅读单身人士时,我发现这个解释是使用单身人士的理由:

  

由于这些对象方法没有改变内部类状态,我们   可以将此类创建为单例。

这究竟意味着什么?当你考虑到某些方法没有改变内部类状态?如果是吸气剂?有人可以为使用不改变其内部状态的方法的类提供代码示例,因此可以用作单例,而不应该是单例的类吗?

通常,当人们解释单例模式时,他们使用数据库连接类作为示例。这对我来说很有意义,因为我知道我希望在一个应用程序实例中只有一个数据库连接。但是,如果我想在实例化DB连接类时提供强制使用新连接的选项呢?如果我有一些setter方法或构造函数参数强制我的类打开新连接,那么该类仍然是一个单独的主题吗?

我正在使用PHP,但可能会理解用JAVA编写的示例,C#...

这是article reference。您可以按ctrl + f搜索“内部”。基本上,autor解释了为什么FileStorage类是单身人士的好候选人。我不明白这个意思

  

“这些操作不会改变内部类状态,所以我们可以   创建一次实例并多次使用它。“

因此我不明白何时使用单身人士。

在他们的示例中,他们有一些FileStorage类:

class FileStorage
{
    public function __contruct($root) {
        // whatever
    }

    public function read() {
        // whatever
    }

    public function write($content) {
        // whatever
    }
}

他们说这个类可以是单例,因为它的方法read()和write()不会破坏内部类结构。那是什么意思 ?它们不是setter,类是自动单例吗?

1 个答案:

答案 0 :(得分:2)

引述如下:

  

这些操作不会更改内部类状态,因此我们可以创建一次实例并多次使用它。

这意味着有问题的对象没有可以改变的有趣的内部状态;它只是一组方法(可能是静态的)。如果对象没有内部状态,则不必创建多个实例,可以继续重用单个实例。因此,您可以配置依赖项注入容器以将对象视为单例。

这只是一项性能优化。您可以在每次需要时创建该类的新实例。并且它会更好 - 直到对象创建成为可测量的瓶颈。