1

Si j'ai 3 classes, nous allons, pour des arguments les appellent:alternatives pour plusieurs méthodes 'proxy' en Java

  • MainActivity
  • GLRenderer
  • AutreClasse

S'il vous plaît noter que GLRenderer n'est pas purement une classe proxy mais contient des méthodes proxy.

MainActivity initialise un int appelé valeur. Maintenant, si OtherClass doit changer cette valeur pour une raison quelconque et il a seulement un accès direct à la classe GLRenderer (qui à son tour a accès à la classe MainActivity, quelle est la meilleure façon d'accéder à cette variable ?

Actuellement, je suis en utilisant une méthode setter dans MainActivity, puis en utilisant un autre compositeur dans GLRenderer (une méthode proxy vraiment, car il passe simplement la valeur par le biais).

Cela fonctionne bien et c'est comme ça que je fais les choses en ce moment. un code pseudo (je me rends compte de ce code peut ne pas compiler, il est uniquement dans le but de cette question):

Activité principale

public class MainActivity extends Activity { 

    private int value; 

     public setValue(int valueToSet){ 

      value = valueToSet; 

     } 

} 

deuxième classe

public class GLRenderer { 

    private MainActivity activity; 

     public GLRenderer(MainActivity activity){ 

      this.activity = activity; 

     } 


     public setValue(int value){ 

      activity.setValue(value); 

     } 

} 

Autre Classe

public class OtherClass { 

    private GLRenderer glRenderer; 

     public OtherClass(){ 

      this.glRenderer = glRenderer; 

     } 

     public someMethod(){ 

      glRenderer.setValue(5);   

     } 


} 

est-ce qui précède mieux que de faire quelque chose comme ceci: (S'il vous plaît voir les commentaires dans AutreClasse code)

GLRenderer

public class GLRenderer { 

    private MainActivity activity; 

     public GLRenderer(MainActivity activity){ 

      this.activity = activity; 

     } 

    public MainActivity getActivity(){ 

     return activity;  

    } 

} 

Autre classe

public class OtherClass { 

    private GLRenderer glRenderer; 

     public OtherClass(){ 

      this.glRenderer = glRenderer; 

     } 

     public someMethod(){ 

      //I know this is considered bad..... 
      glrenderer.activity.setValue(5); 

      //But how about this - is this any different/better and if so, why? 
      glRenderer.getActivity().setValue(5); 



     } 


} 

Je sais la première méthode nécessite une instruction finale plus courte dans OtherClass mais en utilisant la méthode ci-dessus, je pouvais accéder à MainActivity sans avoir à dupliquer efficacement mes getter/setters (ce qui peut être pénible si j'ai beaucoup de choses que j'ai besoin d'accéder).

Répondre

3

"Est-ce que ce qui précède est mieux que de faire quelque chose comme ça?" Oui, c'est vrai, car la deuxième approche viole l'encapsulation en permettant à OtherClass de savoir que GLRenderer est un proxy pour MainActivity.Ce n'est pas dans les activités de OtherClass que GLRenderer définit sa valeur int.

La première approche est également meilleure du point de vue de la maintenance, car elle permet à MainActivity (et à l'utilisation de MainActivity de GLRenderer) de changer indépendamment de OtherClass. Dans la deuxième approche, une modification de la façon dont la valeur int est définie nécessiterait que OtherClass change également.

Questions connexes