[英]How to avoid circular dependency between two classes?
我有两个类-一个定义BaseActivity
(应用程序中所有活动的全局父类),另一个是AsyncTask
类,在其中定义了通用的网络操作。 但是我有下一个问题。 在其onPostExecute()
方法中名为RestfulNetworkTasks
AsyncTask
类必须调用在BaseActivity
类中定义的UpdateCurrentActivityAfterNetworkOperation()
,但BaseActivity
类还必须创建RestfulNetworkTasks
的实例。 这是清楚说明此问题的代码。
class RestfulNetworkTasks extends AsyncTask<Pair<String, LinkedHashMap<String, Object>>, Void, LinkedHashMap<String, Object>> {
private ImmutableMap<String, Object> serverData_;
NetworkOperation LowLevelRestOperations_ = new NetworkOperation();
@Override
protected LinkedHashMap<String, Object> doInBackground(Pair<String, LinkedHashMap<String, Object>>... params) {
return LowLevelRestOperations_.executeServerCommand(params[0].getValue0(), params[0].getValue1());
}
protected void onPostExecute(LinkedHashMap<String, Object> result) {
serverData_ = copyOf(result);
BaseActivity instance_Activity = new BaseActivity();
//BaseActivity injection (It is too bad to create Activity in such a way - I know!) So I need some piece of advice
instance_Activity.UpdateCurrentActivityAfterNetworkOperation(serverData_);
//Here I must call method for updating GUI after operation
}
public ImmutableMap<String, Object> GetDataFromServer() {
return serverData_;
}
}
public class BaseActivity extends Activity {
RestfulNetworkTasks serverOperation_ = new RestfulNetworkTasks(); //RestfulNetworkTasks injection
public void UpdateCurrentActivityAfterNetworkOperation(
ImmutableMap<String, Object> server_data) {
}// Here is this method which I will override in my child activities
@SuppressWarnings("unchecked")
public ImmutableMap<String, Object> Login(LinkedHashMap<String, Object> parameters) {
Pair<String, LinkedHashMap<String, Object>> params_ = new Pair<String, LinkedHashMap<String, Object>>(LOGIN_COMMAND, parameters);
serverOperation_.execute(params_);
return serverOperation_.GetDataFromServer();
}
}
如您所见,我在RestfulNetworkTasks和BaseActivity类之间具有循环依赖关系,这可能会导致构造函数的无限链调用。
问题是如何重构该设计以避免这种情况?
AsyncTask几乎总是从Activity调用,那么为什么不仅仅将其作为构造函数参数传入呢?
RestfulNetworkTasks.java:
private BaseActivity activity;
public RestfulNetworkTasks(BaseActivity activity){
this.activity = activity;
}
BaseActivity.java:
new RestfulNetworkTasks(this).execute();
您不应该这样创建活动
BaseActivity instance_Activity = new BaseActivity();
活动由系统管理
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.