Вы пишете класс, чтобы экземпляры класса поддерживали состояние. Вы помещаете это состояние в класс, потому что все состояния в классе связаны. У вас есть функция для управления этим состоянием, чтобы нельзя было установить недопустимые перестановки состояний (печально известный квадрат, который имеет ширину и высоту членов, но если ширина не равна высоте на самом деле это не квадрат .)
Если у вас нет состояния, вам не нужен класс, вы можете просто использовать свободные функции (или в Java - статические функции).
Итак, вопрос не в том, должна ли я иметь одну функцию? а точнее "какая сущность с полным состоянием инкапсулирует мой класс?"
Может быть, у вас есть одна функция, которая устанавливает все состояния - и вы должны сделать ее более детальной, чтобы, например, вместо void Rectangle::setWidthAndHeight( int x, int y)
у вас был setWidth
и отдельный setHeight
.
Возможно, у вас есть ctor, который настраивает вещи, и одна функция, которая doesIt
, что бы это ни было. Тогда у вас есть функтор , и один doIt
может иметь смысл. Например, class Add implements Operation { Add( int howmuch); Operand doIt(Operand rhs);}
(Но тогда вы можете обнаружить, что вам действительно нужно что-то вроде шаблона посетителя - чистый функтор более вероятен, если у вас есть объекты с чисто ценностями, посетитель, если они расположены в дереве и связаны друг с другом.)
Даже если у этих множества небольших объектов единственная функция является правильным уровнем детализации, вы можете захотеть создать нечто вроде шаблона фасада, составленного из примитивных операций, часто используемых сложных операций.
Там нет одного ответа. Если у вас действительно есть куча функторов, это круто. Если вы действительно просто делаете каждую свободную функцию классом, это глупо.
Реальный ответ заключается в ответе на вопрос: «В каком состоянии я управляю, и насколько хорошо мои классы моделируют мою проблемную область?»