Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 需要帮助理解单例和对象生命周期吗_Oop_Singleton - Fatal编程技术网

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。