Ogni metodo deve avere ogni volta il proprio oggetto creato

-3

Ho un po 'di confusione se un metodo dovrebbe creare un'istanza di una classe ogni volta che viene richiamata? È tutto possibile spostare questa parte di creazione dell'istanza nel costruttore e utilizzare semplicemente il riferimento ai metodi di chiamata, ma qual è il modo migliore ??

Codice > >

Class B{
   void readFromS3(){// this method reads from a S3 bucket}
   void writeToS3(){// this method writes to a S3 bucket}
}

Approccio A

public class A{
 private B b;
 public A(){
   this.b = new B();
 }

 void someMethodInA(){
      b.readFromS3();
      b.writeToS3();
 }
}

Approccio B

public class A{
 public A(){
   // nothing here
 }

 void someMethodInA(){
      B b = new B();
      b.readFromS3();
      b.writeToS3();
 }

In quali casi dovrebbe essere utilizzato ciascun approccio? Grazie .. !!

    
posta Infamous 04.03.2018 - 11:32
fonte

4 risposte

7

Gli oggetti hanno un significato. La loro esistenza dovrebbe dipendere da quel significato, non solo da un'idea astratta "Ho bisogno di chiamare alcuni metodi". In altre parole, la durata dei tuoi oggetti dovrebbe essere ovvia dal loro scopo.

Se i tuoi oggetti non hanno un significato, significa solo che hai disegnato male i tuoi oggetti.

    
risposta data 04.03.2018 - 23:56
fonte
1

A breve: è una questione di design. E, naturalmente, il design dovrebbe occuparsi dell'utilizzo della memoria ecc.

Potrebbero esserci casi in cui l'approccio A può adattarsi meglio di B (che è completamente diverso, e ancora una volta - una questione di design o addirittura di requisiti), e viceversa ...

    
risposta data 04.03.2018 - 12:43
fonte
0

Come altri hanno detto, dipende. Possibili considerazioni potrebbero essere:

  • Quante risorse consuma un'istanza B? In termini di utilizzo della memoria o affermazioni su scarsi oggetti del sistema operativo che dovrebbero essere rilasciati il prima possibile. Quanto è costoso istanziare B?
  • Con quale frequenza viene chiamato il metodo B?
  • Cosa ti interessa della velocità di esecuzione del metodo B, è un problema?
  • Quando viene creato B, il suo stato rappresenta un'istantanea di qualcosa che presto diventerà obsoleto o è una vecchia B altrettanto buona di una nuova?

Tutto ciò rende la decisione inclinata verso l'una o l'altra direzione.

    
risposta data 04.03.2018 - 17:15
fonte
0

Questa è una questione di design. Più precisamente, il design della classe A. La classe A rappresenta un'astrazione di qualche entità. Quell'astrazione ha qualche stato. Se la classe B fa parte di quello stato, allora B dovrebbe essere un membro di quella classe. Se non lo è, non dovrebbe essere un membro di quella classe.

Quest'ultimo caso, tuttavia, non significa che dovresti istanziare la classe B in un metodo di classe A dove dovrebbe essere invocato un metodo di B. Potrebbe essere sufficiente passare semplicemente B come argomento.

    
risposta data 10.04.2018 - 09:51
fonte

Leggi altre domande sui tag