初识封装(Http)

2017-01-02  本文已影响0人  BridgeXD

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;

}

上一篇 下一篇

猜你喜欢

热点阅读