需要帮助了解单身人士和对象的生命周期

时间:2017-09-04 09:34:42

标签: oop singleton

如果我有两个方法的类,那些做不同的事情,但每次调用这些方法时类属性都不会改变,那么这个类是一个很好的候选单元吗?

例如:

class Foo {

    public function doFirst($params);

    public function doSecond();

}

如果我在我的控制器中调用doFirst()方法,并在我的视图中调用doSecond()。这个班级是单身人士有意义吗?我在想的是:如果我不改变类属性(类状态),那么我不需要它的两个实例。这是正确的思维方式吗?此外,单例类只能配置一次,对吗?因此,如果我将我的类配置一次,然后调用其中的两个方法,它可以是一个单例。但是如果我需要在调用第二个方法之前重新配置类,那么它不能是单例吗?

我希望你理解我的问题,因为我很困惑,不知道如何更好地问它。

1 个答案:

答案 0 :(得分:1)

您似乎认为只要方法不改变状态,或者只需要一个状态,类就可以是单例。

然而,单例模式的目的是用于创建全局可变状态which is already quite "code-smelly" on its own。如果你的状态是不可变的,那么static(或VB中的Shared)成员就可以了。

如果您的Foo类只有这两种方法,我会将它们标记为static(或VB中的Shared)。因为它们似乎只是“辅助”方法,不需要任何“状态”来运作。

如果你想在调用第二种方法之前改变状态,我建议你使用另一种模式,如dependency injection而不是单身。

相关问题