Реализуйте runnable для класса, основное назначение которого не состоит в том, чтобы быть runnable (стиль кодирования)

Я программирую таймер босса для Guild Wars 2. У меня есть Boss класс, который содержит все связанные игровые события и update() метод для получения текущих статусов событий из API.

Чтобы снизить время обновления для всех боссов, я хочу распараллелить запросы.

Теперь я мог легко реализовать Runnable интерфейс в моем Boss класс и назвать update() метод в run() метод.

После этого я перебрал бы всех боссов, передав их в Executor"s execute() метод и дождаться обновления всех боссов.

Что-то не так с реализацией Runnable интерфейс для класса, который является больше классом, который содержит информацию, чем работник или около того, касающийся стиля кодирования?

В качестве альтернативы я мог бы также создать отдельное средство обновления, которое работало бы и выполняло update() метод Boss объект вместо того, чтобы включить в Boss сам класс.

1 ответ

Есть ли что-то не так с реализацией интерфейса Runnable для класса, который является скорее классом, который содержит информацию, чем рабочий, или около того относительно стиля кодирования?

Похоже, вы пытаетесь иметь один набор классов, которые содержат данные, и другой набор классов, которые имеют поведение. Это плохой дизайн. Объектно-ориентированное программирование - это объединение данных и поведения в одну вещь (объекты).

Когда дело доходит до того, должен ли класс реализовать Runnable интерфейс (или любой другой интерфейс), самое главное, чтобы соответствовать контракту этого интерфейса. Это описано в JavaDoc дляRunnable:

Интерфейс Runnable должен быть реализован любым классом, экземпляры которого предназначены для выполнения потоком... Этот интерфейс предназначен для предоставления общего протокола для объектов, которые хотят выполнять код, пока они активны... Быть активным просто означает, что поток был запущен и еще не остановлен.

Вы упомянули использование Executor, так что вы действительно хотите, чтобы эти экземпляры выполнялись потоком, поэтому Runnable является целесообразным.

Другие вопросы по тегам