Gå til innhold

Singelton pattern og instansiering


Anbefalte innlegg

Jeg må ha misforstått noe med singletonpattern.

 

jeg har denne koden

public class GuiFacade {	
private Logic applicationLogic;
private Gui gui;
private static GuiFacade theInstance = new GuiFacade();
private GuiFacade(){	
 gui = new Gui();
 applicationLogic = new Logic();	
 System.out.println("The instance: " + theInstance); // skriver ut null
}

public static GuiFacade getInstance(){  
 return theInstance;
}
[...]

 

og når jeg kaller på GuiFacade.getInstace() får jeg alltid null. Hvis jeg lar vær å instansiere theInstance i variabellisten, men heller gjør det i getInstance() slik:

public static GuiFacade getInstance(){  
 if(theInstance ==null){
 	theInstance = new GuiFacade();
 }
 return theInstance;
}

 

får jeg noe som ligner veldig på en evig løkke (uten at jeg får beskjed om dette, skjermen bare står og flimrer og nye vinduer åpnes hele tiden)

 

Noen som ser hva jeg gjør galt?

Takknemlig for svar, innlevering på mandag.

 

Tanken bak GuiFacade er at alt som har med gui å gjøre ligger "under" denne klassen, i midten ligger applicationLogic, som også håndterer DBFacade (som styrer alt som har med db-kontakt å gjøre)

 

Jeg tenker at disse tre klassene utgjør kjernen i applikasjonen, og all kommunikasjon går gjennom disse.

 

(Dette fører igjen til at jeg har mange dummy-metoder, som eneste oppgave er å sende metodekall videre til nedenforliggende klasser. Er dette et villspor?)

Lenke til kommentar
Videoannonse
Annonse

Hei

 

Dette er en singleton, slik du gjorde i et andre eksemplet som ble feil. Da er det en singleton. Det er noe annet enn singleton i seg selv som er feil her.

 

public class GuiDAO {
private static GuiDAO instance;

public static GuiDAO getInstance(){
 if(instance == null){
 	instance = new GuiDAO();
 }
 return instance;
}

private FacadeGui(){
 
}

}

 

Denne kan du kanskje skrive ut i getInstance() rett før du returnerer istedet, kanskje du blir lurt? :ermm:

System.out.println("The instance: " + theInstance);

 

Hva med dette da? En Facade eller DAO eller hva det måtte vært, så er det jo noe som heter lav kobling:D Dette hører jo ikke til her.

gui = new Gui();

applicationLogic = new Logic();

 

Vennlig hilsen

High Voltage

Endret av HV
Lenke til kommentar

Hva med dette da? En Facade eller DAO eller hva det måtte vært, så er det jo noe som heter lav kobling:D  Dette hører jo ikke til her.

gui = new Gui();

applicationLogic = new Logic();

 

Vennlig hilsen

High Voltage

6138006[/snapback]

 

Mulig jeg har fjernet feil del av quoten, men hva mener du her? At Gui og applikasjonslogikk ikke skal/bør instansieres i singleton?

Lenke til kommentar

Nei det vat jeg som lesto over litt for hurtig, straks jeg så facade tenkte jeg db eller et lag mot db. Har aldri sett en gui facade før.

 

Edit: Hvorfor trenger du en facade for guiet?

Endret av HV
Lenke til kommentar
Nei det vat jeg som lesto over litt for hurtig, straks jeg så facade tenkte jeg db eller et lag mot db. Har aldri sett en gui facade før.

 

Edit: Hvorfor trenger du en facade for guiet?

6139100[/snapback]

 

Godt spørsmål i grunnen, seminarleder er veldig opptatt av fasader og interface, men det kan være han bare mener i forhold til Db (og det har jeg) *refaktorerer*

 

Kanskje du gidder å forklare litt om når man bruker facade? Siden det ikke er i forhold til Gui mener jeg. Det rare er nemlig at når jeg skal kjøre programmet må jeg nemlig kalle Gui, ikke GuiFacade, så kanskje det burde fortalt meg at GuiFacade er malplassert.

Lenke til kommentar

Den eneste plassen jeg noen gang har brukt facade pattern var et litt større prosjekt i J2EE, det det var 15-20 ejber. Istedefor å kontakte den ene bønnen etter den andre når jeg måtte ha data, så snakket jeg kun med facaden som da igjen snakket med alle de andre. Facaden lå da på serveren.

 

Tenk deg hvis du skal gjøre noe, feks hugge ned et tre, så er det ganske kjipt å klatre opp og hugge ned hver eneste gren, når du istedet bare kunne gått løs på stammen. Mye enklere å bare forholde seg til den.

 

Hadde vi i prosjektet kun hatt 1 bønne hadde det vært meningsløst å bruke facade, det blir som et tre uten grener :D

 

I database laget på klienten hadde jeg en DAO(singleton) som kun snakket med facaden.

 

Interface er jo også en fin ting som kan brukes til mye, men man skal jo ikke bruke verken facade eller interface bare for å bruke de vell?

Lenke til kommentar

Interface er jo også en fin ting som kan brukes til mye, men man skal jo ikke bruke verken facade eller interface bare for å bruke de vell?

6139209[/snapback]

 

Hmm, jo. Når sensor liker det så. Jeg har fjernet guiFacade, og faktisk gjør det koden min mye enklere. Nå er logic senter av applikasjonen, den kommuniserer med Gui og DbFacade og ingenting annet.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...