2010-11-17 2 views
0

Я пытаюсь сделать простую игру. У меня есть класс для экранного буфера, класс для изображений и класс для спрайтов. Мой вопрос таков:
Поскольку каждый спрайт должен «принадлежать» к некоторому изображению (спрайт содержит только координаты внутри некоторого изображения и указатель/ссылку на изображение), должен ли я передать класс изображения в конструктор спрайтов, как так:design pattern определение

Sprite spriteInstance(imageInstance, rect, ...); 

или имеют спрайтов, возвращаемые методом класса изображений

Sprite spriteInstance = imageInstance.createSprite(rect, ...); 

или делает это дело личных предпочтений. (оба явно работают, мне просто интересно, считается ли один из «правым» или «professional» способ сделать это.)
То же самое касается отношения изображения/экрана: если поверхность должна быть возвращена экран или изображение прошло через экран.

Третий вариант, который я не пытался осуществить еще будет иметь класс «Игра», и сделать это:

Game gameInstance; 
Image imageInstance = gameInstance.loadImage(path); 
Sprite spriteInstance = gameInstance.newSprite(imageInstance, rect, ...); 

Если второй/третий способы выше рекомендуются, если спрайт конструктор класса должен быть закрытым с классом изображения как «другом» или оставлен как общедоступный? И имеет ли этот тип метода имя, которое я могу найти для дальнейшего понимания? Это то, что называется «Factory pattern»?

Благодаря

ответ

1

Похоже, что у вас есть два отдельных вопроса здесь: где поставить логику для создания спрайта на основе изображения, и стоит ли использовать фабричный метод или нет.

Я бы посоветовал против imageInstance.createSprite, если это не имеет смысла для изображения, чтобы знать, что существует некоторый класс с именем Sprite. Вы хотите сохранить видимость однонаправленной, если это вообще возможно. Поэтому, если изображение не зависит от спрайта, не позволяйте ему даже знать, что класс Sprite существует.

Я мог бы предложить

Sprite s = Sprite.forImage(image, rect); 

Я не могу сказать гораздо больше, не зная больше о классах (и обязанности) игры, изображения и Sprite.

Что касается заводских методов, то орехи. Эффективная Java имеет хорошую главу по их достоинствам.

+0

На данный момент у меня нет игрового класса. Возможно я должен. Я упомянул это как мысль, которая пришла мне в голову, чтобы один объект отвечал за все аспекты игры, включая создание объектов. – baruch

+0

Да, это правильно. Именование forImage не слишком ясно для меня, может, некоторые глаголы? Если бы это был Create.Sprite.forImage, это было бы. Здесь Create - ваш статический или singleton (также известный как фабрика), Sprite - объект свойства, а forImage - метод класса Sprite – user44298