• 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

Object Storage Arubacloud
0 głosów
399 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 (93,790 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 458 wizyt
pytanie zadane 13 września 2016 w PHP przez deimos Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 427 wizyt
pytanie zadane 18 maja 2015 w Java przez Orte Nowicjusz (190 p.)
0 głosów
0 odpowiedzi 254 wizyt
pytanie zadane 18 listopada 2021 w C# przez Zaba096 Początkujący (260 p.)

92,556 zapytań

141,404 odpowiedzi

319,563 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...