gpt4 book ai didi

oop - 何时在 OOP 中使用单例?

转载 作者:行者123 更新时间:2023-12-04 23:57:27 30 4
gpt4 key购买 nike

在阅读单例时,我发现这个解释是使用单例的原因:

since these object methods are not changing the internal class state, we can create this class as a singleton.



这到底是什么意思?当您认为某些方法没有改变内部类状态时?如果是 setter/getter ?有人可以为使用不改变其内部状态的方法的类提供代码示例,因此可以用作单例,以及不应该是单例的类吗?

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

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

这是 article reference .您可以 ctrl+f 搜索“内部”。基本上,autor 正在解释为什么 FileStorage 类是一个很好的单例候选人。看不懂这句话

"These operations do not change the internal class state, so we can create its instance once and use it multiple times."



因此我不明白何时使用单例。

在他们的示例中,他们有一些 FileStorage 类:
class FileStorage
{
public function __contruct($root) {
// whatever
}

public function read() {
// whatever
}

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

他们说这个类可以是一个单例,因为它的方法 read() 和 write() 不会改变内部类结构。这意味着什么 ?他们不是二传手,类是自动单例的?

最佳答案

引文如下:

These operations do not change the internal class state, so we can create its instance once and use it multiple times.



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

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

关于oop - 何时在 OOP 中使用单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41249249/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com