美文网首页
初识封装(Http)

初识封装(Http)

作者: BridgeXD | 来源:发表于2017-01-02 23:13 被阅读0次

    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;
    

    }

    相关文章

      网友评论

          本文标题:初识封装(Http)

          本文链接:https://www.haomeiwen.com/subject/glrgvttx.html