zoukankan      html  css  js  c++  java
  • 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;
        }
    }

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

  • 相关阅读:
    VScode 修改中文字体
    missing KW_END at ')' near '<EOF>'
    SQL inner join, join, left join, right join, full outer join
    SQL字符替换函数translater, replace
    SQL COOKBOOK SQL经典实例代码 笔记第一章代码
    sqlcook sql经典实例 emp dept 创建语句
    dateutil 2.5.0 is the minimum required version python
    安装postgresql后找不到服务 postgresql service
    Postgres psql: 致命错误: 角色 "postgres" 不存在
    【西北师大-2108Java】第十六次作业成绩汇总
  • 原文地址:https://www.cnblogs.com/tony-yang-flutter/p/3457431.html
Copyright © 2011-2022 走看看