1、方法参数过多时,可用实例类将参数抽取出来,再用构造函数实例化。
eg:
private static HttpURLConnection get(Request request){}
2、暴露给外部一个方法public,其余用private方法,可用枚举。
enum RequestMethod{GET,POST,PUT,DELETE}
switch (request.requestMethod) {
case GET:
case DELETE:
return get(request);
case POST:
case PUT:
return post(request);
}
3、可用接口实现回调,实现异步。
4、声明什么样的泛型,返回什么样的Object。
interface ICallback<T>{
void Success(T result);
void Failure(Exception e);
T parse(HttpURLConnection connection) throws Exception;
}
5、用接口的实现类抽取多方法的共性。
HttpURLConnection get(Request request){
return httpConnection;
}
request.icallback.parse(httpConnection);
6、去除回调函数不要共同实现的方法(不同Object,不同的实现方法),用抽象类。
public abstract class AbstractCallback<T> implements ICallBack<T> {
@Override
public T parse(HttpURLConnection connection) throws Exception {
int status = connection.getResponseCode();
if (status == 200) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
InputStream is = connection.getInputStream();
byte[] buffer = new byte[2048];
int len;
while ((len = is.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
is.close();
out.flush();
out.close();
String result = new String(out.toByteArray());
return bindData(result);
}
return null;
}
/**
* 对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,
* 必须根据子类的实际需求来进行不同的实现,
* 那么就可以将这个方法声明为abstract方法,此时这个类也就成为 abstract类了
*/
protected abstract T bindData(String result) throws Exception;
}
网友评论