• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JavaFX - Singletone, Abstract Factory, Dependency Injection

0 głosów
170 wizyt
pytanie zadane 2 lipca 2016 w Java przez plox Początkujący (320 p.)

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.

1 odpowiedź

0 głosów
odpowiedź 5 lipca 2016 przez event15 Szeryf (94,050 p.)
Singleton nie jest najlepszą praktyką. Jest trudny w testowaniu, łamie eknapsulację.

http://www.tutorialspoint.com/design_pattern/abstract_factory_pattern.htm

Aczkolwiek można tam wywalić to "static"
komentarz 6 lipca 2016 przez plox Początkujący (320 p.)
Tzn sprawa wygląda tak że bardzo chciałem wykorzystać tego Singletona ze względu na to że chodzi mi głownie o poznanie wzorców projektowych więc nawet byłbym rad jeżeli z powodu tego były by później problemy, tak najłatwiej się nauczyć i zrozumieć, a co do linku który pan podał, rozumiem że skoro podał pan ten link to są błędy w implementacji wzorca fabryki, wiadomo pierwsza implementacja mogą być ale też mam pytanie czy ogólnie założenie że kontrolery będą tworzone przez fabryki jest dobre i druga sprawa kiedy po wrzuceniu posta dalej siedziałem nad kodem to pojawił się też problem z Dependency Injection, ponieważ z tego co poczytałem trochę w sieci to właśnie powinienem się zdecydować czy użyć fabryk czy dependency injection ponieważ trochę koliduje to ze sobą no chyba że myślałem też o rozwiązaniu takim że wstrzykiwanie zależności jest wtedy "kontrolowane" przez wzorzec fabryk . A wstrzykiwanie byłoby związane z kontrolerami. Niestety mój zamysł początkowy nie wyszedł za bardzo bo chciałem zrobić coś na zasadzie że kontrolery tworzone w fabrykach a do nich wstrzykiwane zależności z widoku tylko że chyba zależności i tak są wstrzykiwane przy adnotacji @FXML

Podobne pytania

0 głosów
2 odpowiedzi 147 wizyt
0 głosów
2 odpowiedzi 281 wizyt
pytanie zadane 18 maja 2015 w Java przez Orte Nowicjusz (190 p.)
0 głosów
1 odpowiedź 38 wizyt
pytanie zadane 15 godziny temu w Java przez NyguseK Początkujący (490 p.)
Porady nie od parady
Zadając pytanie postaraj się o szczegółowe opisanie problemu oraz udostępnienie wszystkich istotnych informacji (kody źródłowe, zrzuty ekranu itp.).Opisanie problemu

53,174 zapytań

96,434 odpowiedzi

197,515 komentarzy

25,973 pasjonatów

Przeglądających: 242
Pasjonatów: 15 Gości: 227

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...