Witam rozpoczynam przygodę z pewnym projektem w Javie. Uznałem że przyszła już pora w mojej przygodzie z programowaniem na zaznajomienie się z wzorcami projektowymi. Na celowniku są te wzorce które podałem w temacie. Po zapoznaniu się z całą wiedzą teoretyczną nie jestem pewny czy dobrze zrozumiałem założenia poszczególnych wzorców oraz sposób ich zastosowania, ale oczywiście zdając sobie sprawę z tego że czytanie teorii za dużo nie daje zwłaszcza w moim przypadku spróbowałem dokonać implementacji. To co się wykluło zamieszczę w kodzie poniżej, a przechodząc do tego o co mi właściwie chodzi.... mianowicie czy ta implementacja ma sens i czy jest zrobiona w miarę prawidłowo i czy to ma jakiś potencjał, a jeśli nie to co jest tutaj nie tak. Czekam na sugestie i konstruktywną krytykę.
Nie użyłem tutaj jeszcze Dependency Injection ale to co mogę powiedzieć to do tego będę chciał użyć Google Guice żeby wstrzykiwać zależności z widoków do Kontrolerów które są tworzone przez "Fabryki". Na tą chwile nie zagłębiamy się w logikę biznesową no chyba że jest to istotne w tej sytuacji.
Main.java
public class Main extends Application {
@Override
public void start(Stage stage){
GuiFactory factory = GuiFactory.getControllerFactory(ScreenName.Welcome);
Controller controller = factory.createController();
controller.show(stage);
}
public static void main(String[] args) {
launch(args);
}
}
ScreenName.java
public enum ScreenName {
Welcome
}
GuiFactory.java
public abstract class GuiFactory {
public static GuiFactory getControllerFactory(ScreenName name) {
switch (name) {
case Welcome:
return new WelcomeControllerFactory();
default:
return null;
}
}
public abstract Controller createController();
}
WelcomeControllerFactory.java
public class WelcomeControllerFactory extends GuiFactory {
Controller controller;
public Controller createController()
{
return controller = WelcomeController.getInstance();
}
}
Controller.java
public interface Controller {
public Scene generateScene();
public void show(Stage stage);
}
WelcomeController.java
public class WelcomeController implements Initializable, Controller {
public Parent parent;
public Scene scene;
public Stage stage;
private final static WelcomeController INSTANCE = new WelcomeController();
public static WelcomeController getInstance(){
return INSTANCE;
}
private WelcomeController(){}
@Override
public Scene generateScene() {
FXMLLoader fxmlloader = new FXMLLoader(getClass().getResource("WelcomeScreen.fxml"));
fxmlloader.setController(this);
try {
parent = (Parent) fxmlloader.load();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
parent.getStylesheets().add("application.css");
scene = new Scene(parent);
return scene;
}
@Override
public void show(Stage stage) {
this.stage = stage;
stage.setScene(generateScene());
stage.setTitle("Welcome");
stage.setResizable(false);
stage.show();
}
@Override
public void initialize(URL location, ResourceBundle resources) {
// TODO Auto-generated method stub
}
}
Pliku fxml nie zamieszczam nie wydaje mi się żeby miał on jakieś znaczenie.
Będę wdzięczny za jakiekolwiek mądre wypowiedzi w tym temacie.