您编写了一个类,以便该类的实例保持状态。你把这个状态放在一个类中,因为类中的所有状态都是相关的。你有函数来管理这个状态,这样就无法设置状态的无效排列(臭名昭着的正方形有成员宽度和高度,但是如果宽度不不等于它不是一个真正的方形。)
如果你没有状态,你不需要一个类,你可以只使用免费函数(或在Java中,静态函数)。
所以,问题不是“我应该有一个功能吗?”而是“我的班级封装的是什么有状态的实体?“
也许你有一个函数,将所有国家 - 和你应该让更精细,使得例如,而不必void Rectangle::setWidthAndHeight(int x, int y)
你应该有一个setWidth
和独立setHeight
也许你有。一个构造函数,设置东西,和一个单一的功能doesIt
,不管“它”,然后你有函子,和一个doIt
可能是有意义的。例如,class Add implements Operation { Add(int howmuch); Operand doIt(Operand rhs);}
(但你可能会发现,你真的想要像访问者模式 - 一个纯粹的f如果你有纯粹的价值对象,那么unctor更有可能;如果它们被安排在一棵树中,并且彼此相关,访客就更有可能)。
即使有这么多小对象,单功能是正确的粒度级别,你可能想要像Facade Pattern这样的东西来构造出原始操作,经常使用的复杂操作。
没有人回答。如果你真的有一堆仿函数,那很酷。如果你真的只是把每个免费的功能变成一个班级,那是愚蠢的。
真正的答案在于回答这个问题:“我管理的是什么状态,以及我的班级如何模拟我的问题域?”