我有两个类,它们将使用一个调用Volley并重写onResponse的类。除了两行之外,onReponse中的代码将完全相同。什么是基本上响应超级响应但仍执行额外两行的最佳方法。这就是我的意思:
Class A {
....
Uploader uploader = new Uploader();
uploader.startUpload(context, path, data);
// I know this can't be done but showing what I want
uploader.onResponse(String response) {
super(response);
...
call to extra code
}
}
B类相同但额外代码不同
public class Uploader implements Response.Listener<String> {
public Uploader() { }
public void upLoad(final Context context, String path, String data) {
.... build request and then make call to start request
}
@Override
public void onResponse(String response) {
... Doing something common for both A and B Classes
}
}
答案 0 :(得分:1)
你可以提取一个抽象类:
abstract class MyReponseListener implements Response.Listener<String> {
@Override
public void onResponse(String response) {
//the two lines of common code you want
}
}
并让您的Uploader
扩展您的摘要MyResponseListener
:
class Uploader extends MyResponseListener {
public Uploader() { }
public void upLoad(final Context context, String path, String data) {
}
@Override
public void onResponse(String response) {
super(response);
}
}
如果您想为Uploader
的使用者提供不同的行为,那么您可以将子类作为依赖关系提供,如下所示。
重构ClassA
以依赖Uploader
:
public ClassA(Uploader uploader) {
this.uploader = uploader;
}
子类化Uploader
:
Uploader classAUploader = new Uploader() {
@Override
public void onResponse(String response) {
super.onResponse(response);
//your code for the special handling in ClassA
}
};
将其作为ClassA
的依赖项传递:
ClassA classA = new ClassA(classAUploader);
更好的解决方案可能使用合成而不是继承。因此Uploader
一个Response.Listener<String>
而不是 一个Response.Listener<String>
。然后可以将上述不同的Response.Listener<String>
作为上传者的依赖项传入。如果您使用此技术,则不需要仅为Uploader
更改Response.Listener
的行为。