如果我有3類,讓我們爲了討論打電話給他們:替代多個 '代理' 方法的Java
- MainActivity
- GLRenderer
- OtherClass
請注意,GLRenderer不是單純的代理類,但確實包含了一些代理的方法。
MainActivity初始化一個名爲的值int。現在,如果其他類別需要更改該值,無論什麼原因,它只能直接訪問GLRenderer類(它可以訪問MainActivity類,訪問此變量的最佳方式是什麼?
目前,我使用的setter方法在MainActivity,然後用另一二傳手在GLRenderer(代理方法真的,因爲它只需通過傳遞值)。
這工作正常這是我目前正在做的事情一些僞代碼(我知道這些代碼可能無法編譯,這純粹是對這個問題的目的):
主要活動
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代碼註釋)
GLRenderer
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,但使用上面的方法,我可以不必重複有效的getter我/ setter方法(它可以是一個痛苦,如果我有很多的事情,我需要訪問)從MainActivity訪問任何東西。