2015-06-10 3 views
0

У меня есть общий вопрос об простой игровой архитектуре. В моей игре у меня есть следующие классы:Libgdx: Объекты, создающие другие объекты

  1. Главный класс, который несет ответственность за рисование и рендеринг.
  2. Объект Ball, который имеет несколько атрибутов и функцию update(), которая выполняет определенные действия.

Главный класс имеет массив всех существующих экземпляров шара, а функция render() отвечает за все их вызовы и вызывает их update(). Кроме того, основной класс имеет функцию createBall(), которая создает другой экземпляр.

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

  1. Каждый мяч попадает в его конструктор экземпляра класса Main (Основной класс передает ему себя к мячу при его создании) и вызывает main.createBall();
  2. Каждый шар имеет массив «запросов», которые основной класс читает и понимает, что мяч хочет создать.

Это должен быть общий вопрос, потому что он определяет способ взаимодействия экземпляров с основным классом.

Спасибо!

ответ

1

С точки зрения OOD у меня будет третий класс, который знал бы о создании шаров. Я бы создал экземпляр в Main и передал его в класс Ball в конструкторе. Вы можете назвать этот класс BallFactory.

Класс Ball вызывал бы addRequest(), когда он хотел создать Ball, а основной класс вызывал processRequests(), когда он был готов сделать фактическое создание. Сам список остался бы частной деталью реализации фабрики, которая хороша encapsulation.

Это дает нам лучше separation of concerns.

Варианты, которые вы предлагаете, будут работать, но с чистой точки зрения OO они не идеальны, потому что они уменьшают cohesion либо основного (вариант 1), либо класса Ball (вариант 2).

+0

ОК, и экземпляр Ball вызовет BallFactory.addRequest() (который добавляет массив запросов, которые имеет BallFactory), и главный класс будет проходить через массив в render() и создавать экземпляры в соответствии с запросами ? –

+0

На самом деле, почему бы не вызвать Main вызов метода на BallFactory для обработки списка? Таким образом, в Main не нужно иметь никакого дополнительного кода. Итак ... Ball будет вызывать addRequest(), а Main будет вызывать processRequests() –

+0

Так что в основном processRequests() вызовет main.createBall() в соответствии с его личным списком запросов? –

Смежные вопросы