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

    consiglio design riguardo metodi sovrascritti

    Ciao a tutti,

    supponiamo che abbia una classe con un metodo "call" che fa alcune operazioni e poi chiama attiva del listeners registrati precedentemente :

    Codice PHP:
    class class  superClass{

       public 
    void call(){
         
    operationA();
         
    operationB();
         
    fireRegisteredListeners();
       }


    e poi ho una sottoclasse che deve aggiungere una nuova operazione "operationC" che dovrebbe essere eseguita dopo A e B ma prima di richiamare i listeners.
    ovviamente se sovrascrivo semplicemente il metodo in questo modo
    Codice PHP:
    publlic class subClass extends superClass{
      public 
    void call(){
          
    super.call();
          
    operationC();
          
    fireRegisteredListeners();

    ho che il metodo fireRegisteredListener e' richiamato due volte.

    il problema e' che "super" e' ottimo quando si vogliono aggiungere istruzioni all'inizio o alla fine del metodo della classe padre ma non quando si vorrebbero aggiungere nel mezzo!
    Vi viene in mente un modo elegante per realizzare questa cosa senza reimplementare l'intero metodo da capo?

    grazie
    MB

  2. #2

    Re: consiglio design riguardo metodi sovrascritti

    E se sovrascrivi (fai l'override di) fireRegisteredListeners chiamando prima operationC poi super.fireRegisteredListeners ?
    lolide
    Java Programmer

    Informati

  3. #3

    Re: consiglio design riguardo metodi sovrascritti

    Originariamente inviato da Mr.Bloom
    il problema e' che "super" e' ottimo quando si vogliono aggiungere istruzioni all'inizio o alla fine del metodo della classe padre ma non quando si vorrebbero aggiungere nel mezzo!
    Il problema non sta in quello..sarebbe bastato solo far bene le ridefinizioni.

  4. #4
    codice:
    class class  superClass{
    
       public void call(){
           beforeRegisteredListeners();
           fireRegisteredListeners();
           afterFireRegisteredListeners();
        }
       protected beforeRegisteredListeners()
       {
            operationA();
            operationB();
       }
    
        protected afterFireRegisteredListeners()
        {
        }
    }
    
    
    public class subClass extends superClass{
         public void call(){
            super.call();
        }
        protected afterFireRegisteredListeners()
        {
            operationC();
        }
    }
    Fatto così come lo vedi?
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  5. #5
    Ops...mi sa che ho letto male ingnora...
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  6. #6
    codice:
    class class  superClass{
    
       public void call(){
           beforeRegisteredListeners();
           fireRegisteredListeners();
           afterFireRegisteredListeners();
        }
       protected beforeRegisteredListeners()
       {
            operationA();
            operationB();
       }
    
        protected afterFireRegisteredListeners()
        {
        }
    }
    
    
    public class subClass extends superClass{
         public void call(){
            super.call();
        }
        protected beforeFireRegisteredListeners()
        {
            super.beforeFireRegisteredListeners();
            operationC();
        }
    }
    Ma rivisto così dovrebbe andare
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  7. #7
    Così no eh ?
    codice:
    public class superClass{
    
       public void call(){
           operationA();
           operationB();
           fireRegisteredListeners();
        }
    }
    
    
    public class subClass extends superClass{
        protected fireRegisteredListeners()
        {
            operationC();
            super.fireRegisteredListeners();
        }
    }
    lolide
    Java Programmer

    Informati

  8. #8
    Originariamente inviato da lolide
    Così no eh ?
    codice:
    public class superClass{
    
       public void call(){
           operationA();
           operationB();
           fireRegisteredListeners();
        }
    }
    
    
    public class subClass extends superClass{
        protected fireRegisteredListeners()
        {
            operationC();
            super.fireRegisteredListeners();
        }
    }
    Chiaramente funzionerebbe, ma fireRegisteredListeners non farebbe SOLO lanciare gli eventi per i listener. E' puramenet una questione stilistica, lo ammetto , ma mi piace meno.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  9. #9
    grazie della vostra risposta.

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.