1边篮、方法參數(shù)過(guò)多時(shí)袖外,可用實(shí)例類將參數(shù)抽取出來(lái),再用構(gòu)造函數(shù)實(shí)例化屏富。
eg:
private static HttpURLConnection get(Request request){}
2脂男、暴露給外部一個(gè)方法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一铅、可用接口實(shí)現(xiàn)回調(diào),實(shí)現(xiàn)異步堕油。
4潘飘、聲明什么樣的泛型肮之,返回什么樣的Object。
interface ICallback<T>{
void Success(T result);
void Failure(Exception e);
T parse(HttpURLConnection connection) throws Exception;
}
5卜录、用接口的實(shí)現(xiàn)類抽取多方法的共性戈擒。
HttpURLConnection get(Request request){
return httpConnection;
}
request.icallback.parse(httpConnection);
6、去除回調(diào)函數(shù)不要共同實(shí)現(xiàn)的方法(不同Object艰毒,不同的實(shí)現(xiàn)方法)筐高,用抽象類。
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;
}
/**
* 對(duì)于一個(gè)父類丑瞧,如果它的某個(gè)方法在父類中實(shí)現(xiàn)出來(lái)沒(méi)有任何意義柑土,
* 必須根據(jù)子類的實(shí)際需求來(lái)進(jìn)行不同的實(shí)現(xiàn),
* 那么就可以將這個(gè)方法聲明為abstract方法绊汹,此時(shí)這個(gè)類也就成為 abstract類了
*/
protected abstract T bindData(String result) throws Exception;
}