如果我有 3 个类,让我们为参数起见称它们为:
- 主要活动
- GLR渲染器
- 其他类
请注意,GLRenderer不是纯粹的代理类,而是包含一些代理方法。
MainActivity初始化一个名为value的int 。现在,如果OtherClass出于某种原因需要更改该值,并且它只能直接访问GLRenderer类(而后者又可以访问MainActivity类,那么访问该变量的最佳方法是什么?
目前,我在MainActivity中使用了一个 setter 方法,然后在GLRenderer中使用了另一个 setter方法(实际上是一个代理方法,因为它只是传递值)。
这很好用,也是我目前的工作方式。这是一些伪代码(我意识到这段代码可能无法编译,纯粹是为了这个问题的目的):
主要活动
public class MainActivity extends Activity {
private int value;
public setValue(int valueToSet){
value = valueToSet;
}
}
二等舱
public class GLRenderer {
private MainActivity activity;
public GLRenderer(MainActivity activity){
this.activity = activity;
}
public setValue(int value){
activity.setValue(value);
}
}
其他类
public class OtherClass {
private GLRenderer glRenderer;
public OtherClass(){
this.glRenderer = glRenderer;
}
public someMethod(){
glRenderer.setValue(5);
}
}
以上是否比做这样的事情更好:(请参阅OtherClass代码中的注释)
GLR渲染器
public class GLRenderer {
private MainActivity activity;
public GLRenderer(MainActivity activity){
this.activity = activity;
}
public MainActivity getActivity(){
return activity;
}
}
其他类
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);
}
}
我知道第一种方法需要在OtherClass中使用更短的最终指令,但是使用上述方法,我可以从MainActivity访问任何内容,而无需有效地复制我的 getter/setter(如果我有很多需要的东西,这可能会很痛苦使用权)。