определение шаблона дизайна - PullRequest
0 голосов
/ 18 ноября 2010

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

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

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

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

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

Третий вариант, который я еще не пытался реализовать, - это иметь класс "Game" и сделать это.:

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

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

Спасибо

1 Ответ

1 голос
/ 18 ноября 2010

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

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

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

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

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

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

...