在阅读单身人士时,我发现这个解释是使用单身人士的理由:
由于这些对象方法没有改变内部类状态,我们 可以将此类创建为单例。
这究竟意味着什么?当你考虑到某些方法没有改变内部类状态?如果是吸气剂?有人可以为使用不改变其内部状态的方法的类提供代码示例,因此可以用作单例,而不应该是单例的类吗?
通常,当人们解释单例模式时,他们使用数据库连接类作为示例。这对我来说很有意义,因为我知道我希望在一个应用程序实例中只有一个数据库连接。但是,如果我想在实例化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,类是自动单例吗?
答案 0 :(得分:2)
引述如下:
这些操作不会更改内部类状态,因此我们可以创建一次实例并多次使用它。
这意味着有问题的对象没有可以改变的有趣的内部状态;它只是一组方法(可能是静态的)。如果对象没有内部状态,则不必创建多个实例,可以继续重用单个实例。因此,您可以配置依赖项注入容器以将对象视为单例。
这只是一项性能优化。您可以在每次需要时创建该类的新实例。并且它会更好 - 直到对象创建成为可测量的瓶颈。