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).