Проектирование вспомогательных / служебных классов - Java
Возможно, этот вопрос носит общий характер, но я не нашел ответа, который искал, поэтому я надеялся получить некоторые идеи из этого поста. Я пытаюсь переместить некоторые часто используемые методы к помощнику, чтобы упростить мой дизайн. Я просмотрел несколько постов и дебатов о том, чтобы сделать утилиты статичными, а не статичными. Мой вопрос больше связан с созданием вспомогательных классов с комбинацией статических и нестатических методов. Поскольку существующий класс содержит комбинацию статических и нестатических методов, которые я хочу удалить, поскольку я не хочу дублировать код в нескольких классах. Итак, мне было интересно, стоит ли включать в класс помощника как статические, так и нестатические методы. Причина, по которой я немного сомневаюсь, заключается в том, что большинство служебных методов статичны по своей природе, и я хочу понять, является ли хорошим вариантом проектирования иметь статические и нестатические методы в служебных классах. Какие-либо предложения??
1 ответ
Это зависит от того, что делает класс.
Нестатические методы подразумевают, что вспомогательный класс поддерживает некоторое состояние, которое может быть различным в разных экземплярах. Если у вас его нет, тогда все статические методы - это то, что нужно (подумайте, как классы java Math или Collections).
Если вам нужно поддерживать состояние экземпляра при вызовах методов, тогда полезны нестатические методы. Если вы пойдете в этом направлении, то ваш вспомогательный класс будет иметь конструкторы или статические фабричные методы, которые создают объекты-помощники, и у каждого экземпляра будут поля, поддерживающие состояние.
Нестатические методы также могут быть хорошей идеей, если ваши статические методы часто снова и снова имеют одни и те же параметры, которые являются одинаковыми значениями / ссылками. В этом случае может быть более чистым задавать эти параметры конструктора и просто иметь параметры метода для дополнительных параметров, которые различаются между методами.