理解Android系统的进程间通信原理(一)----RPC中的代理模式

转自:http://www.cnblogs.com/mandroid/archive/2011/02/24/1963357.html

Android系统中的进程间通信是通过一个轻量级的RPC(Remote Procedure Call远程进程调用)和AIDL(Android Interface Definination Language)规范来生成两个进程之间可以相互访问的代码。其中RPC是以接口方式来实现,客户端与被调用实现之间是通过代理模式来实现的,这些又是以JAVA的RMI和代理模式为理论基础的,若要灵活掌握这个轻量级的解决方案,有必要重新理顺这些基础知识的,这里我们先了解代理模式的相关基础,
有关代理模式的知识,可以用下面这个思维导图来表示:

这里以一个代码实例来说明实际运用:
1、抽象类Role代码
package com.magc.proxy;
 
 /**
  * @author magc
  *代理角色和真实角色的共同抽象类
  */
 public abstract class Role {
     
     //作为代理角色和真实角色的共同接口,方便代理角色对外代替真实角色来提供服务
     public abstract void service(String user_id);
 
 }

2、真实角色类RealRole代码

package com.magc.proxy;
 
 /**
  * @author magc
  * 真实角色类
  * 对外是不可访问
  * 
  */
 public class RealRole extends Role {
 
     /* (non-Javadoc)
      * @see com.magc.proxy.Role#service()
      * 提供服务
      */
     @Override
     public void service(String user_id) {
         System.out.println("真实角色为你服务……");
     }
     //验证用户身份
     public boolean CheckUser(String user_id)
     {
         return true;
     }
 
 }

3、代理类ProxyRole代码:

package com.magc.proxy;
 
 /**
  * @author magc
  *    代理角色类
  *    对客户端开发其接口
  *    内部可以直接引用真实角色实例,将客户端的请求转给真实角色实例
  *    对转发请求的前或者后面可以增加一些额外操作
  */
 public class ProxyRole extends Role {
     private RealRole realrole = null;
 
     /* (non-Javadoc)
      * @see com.magc.proxy.Role#service()
      */
     @Override
     public void service(String user_id) {
         System.out.println("代理角色为你服务……");
         //需要时才去创建真实角色实例
         realrole = new RealRole();
         //增加额外操作:验证身份
         System.out.println("验证身份……");
         if(!realrole.CheckUser(user_id))
             return;
         System.out.println("去找真实角色实例帮忙处理事务……");
         realrole.service("magc");
         
         System.out.println("谢谢光临……");
     }
 
 }

4、测试类RoleTest类代码

package com.magc.proxy;
 
 /**
  * @author magc
  *    代理模式测试类
  *    作为客户端去请求调用代理类的接口。
  *    客户端只能访问代理类,而不能访问真实角色类
  */
 public class ProxyTest {
 
     /**
      * @param args
      */
     public static void main(String[] args) {
 
         ProxyRole proxy = new ProxyRole();
         proxy.service("magc");
     }
 
 }

运行测试类,控制台输出结果为:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值