Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania i odpowiedzi
Viewing all articles
Browse latest Browse all 83164

JavaFX - Singletone, Abstract Factory, Dependency Injection

$
0
0

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.


Viewing all articles
Browse latest Browse all 83164