Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    java problema singleton

    ciao
    volevo realizzare una classe singleton per ottenere la data tutte le volte che mi
    serve in un'applicazione , però non sono sicuro che sia corretto , infatti ho
    errore di compilazione ;
    nel metodo preparaData pensavo di fare solo la creazione di GregorianCalendar ,
    in modo che non debba venire creato un nuovo oggetto ogni volta che chiamo
    il metodo getData per avere la data desiderata ;
    coem dovrei fare ?

    ecco il codice :


    codice:
    import java.lang.*;
    import java.util.*;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import javax.swing.*;
    import java.awt.*;
    
    public class Jcalldate {
    
       private String errore;       
       private boolean risultato;   
       private String formatoData;
       private String dataout;
       
       private static Jcalldate istanza = null;
     
       private Jcalldate() {};
      
       // Metodo della classe impiegato per accedere al Singleton
       public static synchronized Jcalldate getSingleton() {
           if (istanza == null) 
               istanza = new Jcalldate();
           return istanza;
       }
        
    
       public boolean preparaData() {
    
          risultato  = false;
    
          try {                       
               GregorianCalendar gc1 = new GregorianCalendar();
               Date date = new Date();   
               risultato = true ; 
               } catch (Exception e) { errore = e.getMessage(); 
                                       System.out.println("errore : " + errore);
                                       e.printStackTrace();
                                       risultato = false ; 
                                     }
     
          return risultato;
    
       }
       
    
       public String getData(String formato_data) {
    
          risultato  = false;
    
          try {                       
               //SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss");
               SimpleDateFormat sdf = new SimpleDateFormat(formatoData);
               
               JOptionPane.showMessageDialog(null,"data 1 : " + sdf.format(gc.getTime()));
               dataout = sdf.format(gc1.getTime());
                risultato = true ; 
               } catch (Exception e) { errore = e.getMessage(); 
                                       System.out.println("errore : " + errore);
                                       e.printStackTrace();
                                       risultato = true ; 
                                     }
     
          return dataout;
    
       }  
        
    }
    grazie
    ciao



    [/CODE]

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    errore di compilazione?
    di fatto tu hai un singleton a metà, potresti farne benissimo a meno visto che cmq ogni volta che vuoi una data crei tutto il carrozzone
    RTFM Read That F*** Manual!!!

  3. #3
    ok , grazie
    però visto che sono un principiante potresti aiutarmi un pochino ?
    grazie mille , ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    non ci siamo capiti, che errore di compilazione hai?
    A parte quello, hai capito bene l'utilità del singleton e la critica che ti ho mosso?
    RTFM Read That F*** Manual!!!

  5. #5
    scusa , non c'è errore di compilazione ,
    probabilmente non ho capito la critica che mi hai fatto , sono ancora troppo
    inesperto per rendermi conto ;
    in chiamo il singleton così:

    Jcalldate.getSingleton().preparaData();

    poi chiamo :

    datamia = Jcalldate.getSingleton().getData("yyyy/MM/dd-HH:mm:ss");

    che mi ritorna la stringa data come desidero ;

    in realtà ho fatto un solo metodo :

    codice:
       public String getData(String formato_data) {
    
          risultato  = false;
    
          try {                       
              
               GregorianCalendar gc1 = new GregorianCalendar();
               Date date = new Date();
               
               SimpleDateFormat sdf = new SimpleDateFormat(formatoData);
               
               JOptionPane.showMessageDialog(null,"data 1 : " + sdf.format(gc1.getTime()));
               dataout = sdf.format(gc1.getTime());
               JOptionPane.showMessageDialog(null,"dataout : " + dataout);
     
               risultato = true ; 
    
               } catch (Exception e) { errore = e.getMessage(); 
                                       System.out.println("errore : " + errore);
                                       e.printStackTrace();
                                       risultato = true ; 
                                     }
     
          return dataout;
    
       }
    però mi sembra crei ogni volta un oggetto gc1 , e questo non mi sembra tanto corretto
    come uso di risorse ......

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    avevi detto di avere un errore in compilazione, per questo chiedevo.
    Lasciando perdere per un momento il singleton, l'allocazione delle risorse è una questione non da poco.
    Una prima valutazione sulla convenienza o meno del tuo metodo la fai andando a vedere "statisticamente" quanto è chiamata la funzione.
    Se statisticamente è chiamata spesso, il singleton avrebbe senso, altrimenti il gioco non vale la candela.

    Come fai a fare il tutto. Tieni conto che quello che secondo me puoi avere come variabile è il formatter: il formato è sempre quello (a meno che tu non voglia renderlo dinamico), il GregorianCalendar, perdonami ma a che ti serve?

    Per fare quello che ti serve puoi:

    1. creare formatter nel tuo oggetto singleton (crearlo al primo avvio)
    2. metodo getData, che sfrutta il formatter già istanziato (non ne deve creare uno nuovo ogni volta) e formatta la data attuale.

    A tutto questo puoi anche non creare un singleton (non vedo a cosa serve) perché tu fai sempre e solo questo

    codice:
    					SimpleDateFormat forma = new SimpleDateFormat("Stringa di formattazione data"); 
    					String out = forma.format(new Long(System.currentTimeMillis()));
    quindi nella classe in cui lo usi crea (nel costruttore) il formatter e ogni volta che lo usi la chiamata è unica.
    RTFM Read That F*** Manual!!!

  7. #7
    ok , grazie
    una cosa però volevo sapere , se uso sempre il metodo :

    codice:
     public String getData(String formato_data) {
    
          risultato  = false;
    
          try {                                 
               GregorianCalendar gc1 = new GregorianCalendar();
               Date date = new Date();           
               SimpleDateFormat sdf = new SimpleDateFormat(formatoData);
               dataout = sdf.format(gc1.getTime());
                risultato = true ; 
               } catch (Exception e) { errore = e.getMessage(); 
                                       System.out.println("errore : " + errore);
                                       e.printStackTrace();
                                       risultato = true ; 
                                     }
     
          return dataout;
    
       }
    viene creato un nuovo oggetto gc1 ad ogni chiamata ?

    grazie, ciao

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ogni volta che c'è una new crei un oggetto
    RTFM Read That F*** Manual!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.