По большей части это вопрос мнения, и я не думаю, что с вашим текущим методом все в порядке. Тем не менее, я думаю о типах и количестве деталей как о конфигурации, а не как о части программы. Вы можете создать файл конфигурации, который определяет части, доступные каждому игроку. Если по каким-то причинам правила шахмат изменяются и включают в себя еще одну фигуру, вам нужно всего лишь изменить конфигурацию, и нет необходимости выяснять, где в исходном коде это определено.
В случае с шахматами это может быть немного излишним, но в более общем смысле это кажется чистым решением.
В качестве альтернативы, вы можете использовать static final Map<FigureTypeEnum, Integer>
для хранения конфигурации и заполнить ее статическим блоком инициализатора. Однако статические блоки инициализатора не очень распространены (по крайней мере, по моему опыту) и могут запутать начинающих разработчиков.
Некоторые другие советы:
- Не используйте свидетель типа в инициализации ArrayList. Этого должно быть достаточно:
private ArrayList<Figure> figures = new ArrayList<>();
- Я не уверен насчет начального размера списка массивов. Это работает в этом случае, потому что вы знаете, что есть 16 штук. Но вы создаете неявную зависимость между createFigures и инициализацией. Кроме того, это кажется преждевременной оптимизацией.
- Рассмотрите возможность определения фигур в виде списка вместо ArrayList. Какая реализация List выбрана, похоже, не имеет отношения к вашему коду.
EDIT:
Еще одно соображение: если вы возвращаете фактический список в методе getFigures (), вы позволяете другим добавлять или удалять элементы из этого списка. Это может быть нежелательно. Вы можете использовать некоторый неизменный список (см., Например: https://www.baeldung.com/java-immutable-list) или вернуть копию списка.