Android使用动态代理搭建网络模块框架

1.Java中的动态代理相信大多数朋友都接触过,在此就不再赘述,如果有不明白的朋友,可以到网上搜一下(一搜一大堆,呵呵。。)

2.本节主要阐述一下如何使用动态代理框架实现Android应用的瘦身开发。

假设把Android网络客户端访问服务器的接口抽象成为一个统一的接口,例如:

public interface AppNetWorkInter{
        public Object execute(Object... objs)
     }

所有关于网络访问的接口都实现此接口,例如:登录,注册,编辑/查看个人资料等,下面以登录(其他网络访问类都集成该统一接口)为例:

public class LoginModel implements AppNetWorkInter
{
    override
    public Object execute(Object...objs)
    {
        //在该方法中实现登录接口所需要的操作
    }
}

动态代理类(主要作用是返回代理对象):

public AppNetWorkProxy implements InvocationHandler
{
    private Object target;

    /**
     * 委托对象并返回一个代理类
     * 
     * @param target
     * @return
     */
    public Object bind(Object target) {
        this.target = target;
        // 取得代理对象
        return Proxy.newProxyInstance(target.getClass().getClassLoader(),
                target.getClass().getInterfaces(), this);
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        Object result = null;
        System.out.println("Game Start!");
        result = method.invoke(target, args);
        System.out.println("Game Over!");
        return result;
    }
}

下面搞一个动态代理工厂处理代理的类

package com.yw.proxy;

/**
 * 动态代理工厂
 * @author yw-tony
 *
 */
public class ProxyFactory1 {
    private ProxyFactory1(){}
    private static ProxyFactory1 instance = null;
    public static ProxyFactory1 getInstance(){
        if(instance == null){
            synchronized (ProxyFactory1.class) {
                if(instance == null){
                    instance = new ProxyFactory1();
                }
            }
        }
        return instance;
    }
    /**
     * 根据传入的参数不同执行不同的操作
     * @param inter
     */
    public Object execute(GameInter inter,Object...objs){
        GameProxy proxy = null;
        GameInter game = null;
        Object obj = null;
        try{
            proxy = new GameProxy();
            game = (GameInter)proxy.bind(inter);
            obj = game.execute(objs);
        }catch(Exception e){
            e.printStackTrace();
        }
        return obj;
    }
}

外部方法在执行时只需要调用代理工厂就可以根据传入的不同参数调用不同的方法,从而实现方法的统一调用。

 

posted on 2013-12-04 13:51  飘杨......  阅读(1256)  评论(0编辑  收藏  举报