如果我有两个方法的类,那些做不同的事情,但每次调用这些方法时类属性都不会改变,那么这个类是一个很好的候选单元吗?
例如:
class Foo {
public function doFirst($params);
public function doSecond();
}
如果我在我的控制器中调用doFirst()方法,并在我的视图中调用doSecond()。这个班级是单身人士有意义吗?我在想的是:如果我不改变类属性(类状态),那么我不需要它的两个实例。这是正确的思维方式吗?此外,单例类只能配置一次,对吗?因此,如果我将我的类配置一次,然后调用其中的两个方法,它可以是一个单例。但是如果我需要在调用第二个方法之前重新配置类,那么它不能是单例吗?
我希望你理解我的问题,因为我很困惑,不知道如何更好地问它。
答案 0 :(得分:1)
您似乎认为只要方法不改变状态,或者只需要一个状态,类就可以是单例。
然而,单例模式的目的是用于创建全局可变状态which is already quite "code-smelly" on its own。如果你的状态是不可变的,那么static
(或VB中的Shared
)成员就可以了。
如果您的Foo
类只有这两种方法,我会将它们标记为static
(或VB中的Shared
)。因为它们似乎只是“辅助”方法,不需要任何“状态”来运作。
如果你想在调用第二种方法之前改变状态,我建议你使用另一种模式,如dependency injection而不是单身。