Предположим, у меня есть класс resources
, который запускает все мои объекты игры OpenGL/Java, а затем передаю их через конструктор в класс Scene (который их требует), например (упрощенный пример) .... .Встраивание Java Constructor
public class Resources {
Hero hero;
Enemy enemy;
MenuButtons mainMenuButtons;
Background background;
Scene mainMenu;
public void createObjects(){
hero = new Hero();
enemy = new Enemy();
mainMenuButtons = new MenuButtons();
background = new Background();
mainMenu = new Scene(hero, enemy, mainMenuButtons, background);
}
}
Очевидно конструктор моей Сцены должны были бы взять 4 аргументы так:
public class MainMenu implements Scene {
hero Hero;
enemy Enemy;
mainMenuButtons MenuButtons;
background Background;
public MainMenu(Hero hero, Enemy enemy, MainMenuButtons mainMenuButtons, Background background){
this.hero = hero;
this.enemy = enemy;
this.mainMenuButtons = mainMenuButtons;
this.background = background;
}
}
Как требуется больше объектов, конструктор становится все больше. Теперь предположим, что я делаю что-то вроде следующего вместо:
public class MainMenu implements Scene {
Resources resources;
public MainMenu(Resources resources){
this.hero = resources.hero;
this.enemy = resources.enemy;
this.mainMenuButtons = resources.mainMenuButtons;
this.background = resources.background;
}
}
Оба варианта позволяют мне использовать объекты в моей mainMenuScene так:
hero.move();
2-я, кажется, немного аккуратнее как конструктор будет никогда не нужно принимать какие-либо дополнительные аргументы. Однако, насколько я помню,, я никогда не видел таких примеров. Является ли это правильной техникой? Будет ли у меня проблемы с этим?
@huseyintugrulbuyukisik, может быть, я неправильно понимаю, но я, хотя Java был pass-by-value, значение для объектов (в отличие от примитивов), являющееся указателем на объект, а не сам объект? Если да, то как передать один объект хуже, чем прохождение 3? Очевидно, мое понимание в этой области неверно - спасибо! – Zippy
Вы правы Zippy, вы получите только копию ссылки, а не копию всего объекта. – folkol
С помощью [Guice] (https://github.com/google/guice/wiki/GettingStarted) то, что вы описываете, называется 'Module'. – dimo414