这是我对无状态对象的理解:从没有类变量的类创建的任何对象都是无状态对象。 我的问题是我们应该何时编写无状态类。拥有无状态对象是一个好习惯。
答案 0 :(得分:6)
如果您需要“将功能作为参数传递”,则无状态对象非常有用。由于函数在java中不是对象,因此使用函数作为参数传递对象是一种实用的方法。
例如Comparator
可以用来排序,如果一个类没有实现Comparable
,或者你需要支持使用“<” - 关系的不同定义进行排序。 (例如,加/减顺序;按不同属性排序......)
工厂(参见http://www.oodesign.com/factory-pattern.html)可能是无状态对象。工厂的所有功能都可以创建对象和创建所需的所有参数 它们可以作为工厂功能的参数。
答案 1 :(得分:1)
通常,如果你拥有的是无状态的(没有实例变量,只有类变量),它没有理由被实例化,也不应该是一个对象(尽管将它作为一个类实现可能对将相关功能组合在一起并管理对静态类变量的访问。)
在我看来,无状态对象合理的一种情况是它是一个简单的接口实现。例如,一个不可变的Collection(例如一个EmptyCollection)可能想成为一个对象,因此它可以像其他Collection对象一样传递和操作,但是可以实现为无状态,因为它是不可变的并且它的状态永远不会被改变