Oop 需要帮助理解单例和对象生命周期吗
如果我有两个方法的类,它们做不同的事情,但每次调用这些方法时类属性都不会改变,那么这个类是一个很好的单例对象吗 例如:Oop 需要帮助理解单例和对象生命周期吗,oop,singleton,Oop,Singleton,如果我有两个方法的类,它们做不同的事情,但每次调用这些方法时类属性都不会改变,那么这个类是一个很好的单例对象吗 例如: class Foo { public function doFirst($params); public function doSecond(); } 如果我在控制器中调用doFirst方法,在视图中调用doSecond方法。这个班级成为单身学生有意义吗?我的想法是:如果我不改变类属性和类状态,那么我就不需要它的两个实例。这是正确的思维方式吗?而且,单例
class Foo {
public function doFirst($params);
public function doSecond();
}
如果我在控制器中调用doFirst方法,在视图中调用doSecond方法。这个班级成为单身学生有意义吗?我的想法是:如果我不改变类属性和类状态,那么我就不需要它的两个实例。这是正确的思维方式吗?而且,单例类只能配置一次,对吗?因此,如果我配置一次类,然后调用它的两个方法,它可以是一个单例。但是,如果我需要在调用第二个方法之前重新配置该类,它不能是singleton吗
我希望您理解我的问题,因为我太困惑了,不知道如何更好地提问。您似乎认为,只要方法不改变状态,或者只需要一个状态,类就可以是单态 但是,单例模式的目的是创建一个全局可变状态。如果您的状态是不可变的,那么VB成员中的静态或共享就可以了 如果您的Foo类只有这两个方法,我会在VB中将它们标记为static或Shared。因为它们似乎只是辅助方法,不需要任何状态来运行
如果您想在调用第二个方法之前改变状态,我建议您使用另一种模式,例如,而不是singleton。我只是将对象从控制器传递到视图。这只是一个简单的示例,我不会解决这个问题。我的问题是关于单例和对象生命周期的。我调用doSecond的视图不一定属于我调用DoFirst的控制器谢谢,我理解你所说的。若我想创建一个不可变的对象,但我想使用DI容器,这样我就可以在整个代码中只实例化接口,这样我就可以轻松地更改实现。这有什么意义吗?@安妮塔,没关系。然后使用DI。