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;
        }
    }

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

  • 相关阅读:
    feedparser win7 python 安装
    Binary Tree Inorder Traversal
    SDUT2013级測试赛_D
    Eclipse中在android项目中出现新建一个Activity后,出现整个project的报错以及包导入以后无法执行等等情况分析。
    代码高亮 highlightjs 使用文档
    android用jsonReader来解析json
    策略模式Strategy——回家乘什么车?
    【转】Android UI系列-----时间、日期、Toasts和进度条Dialog
    【转】24. android dialog ——ProgressDialog 进度条对话框详解
    【转】我的Android笔记(十)—— ProgressDialog的简单应用,等待提示
  • 原文地址:https://www.cnblogs.com/tony-yang-flutter/p/3457431.html
Copyright © 2011-2022 走看看