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.