无状态对象良好做法与否

这是我对无状态对象的理解:从没有类变量的类创建的任何对象都是无状态对象。 我的问题是我们应该何时编写无状态类。 拥有无状态对象是一个好习惯。

如果您需要“将function作为参数传递”,则无状态对象非常有用。 由于函数在java中不是对象,因此使用函数作为参数传递对象是一种实用的方法。

例如,如果类没有实现Comparable或者如果需要支持使用“<” - 关系的不同定义进行排序,则可以使用Comparator进行排序。 (例如,加/减顺序;按不同属性排序……)

工厂(请参阅http://www.oodesign.com/factory-pattern.html )可能是无状态对象。 工厂的所有function都可以创建对象,创建它们所需的所有参数都可以作为工厂function的参数给出。

通常,如果你拥有的是无状态的(没有实例变量,只有类变量),它没有理由被实例化,也不应该是一个对象(尽管将它作为一个类实现,可以将相关的function组合在一起,管理对静态类变量的访问。

在我看来,无状态对象合理的一种情况是,它是一个简单的接口实现。 例如,一个不可变的Collection(例如一个EmptyCollection)可能想要成为一个对象,因此它可以像其他Collection对象一样被传递和操作,但是可以实现为无状态,因为它是不可变的并且它的状态永远不会被改变。