Java设计模式Android开发Java设计模式

Java代理模式与Android的情结

2017-09-08  本文已影响125人  cc荣宣

版权声明:本文为博主原创文章,未经博主允许不得转载

前言

Java 代理模式在 Android 中有很多的应用。比如 AndroidBinderClient 部分就是通过代理模式来访问 Server 端的、代理 ActivityFragment 模式、还有很多开源框架也都使用了代理模式 (主要是动态代理)。

概念

简单地说,代理模式就是代理对象为其他真实对象 (也叫被代理对象) 提供代理机制,以便控制对真实对象的访问。此时,如果真实对象不想直接和客户端接触,则可让代理对象充当真实对象与客户端之间的中介来联系二者,完成事务联系。
抽象地说,代理对象和被代理对象一般实现相同的接口,调用者与代理对象进行交互。代理的存在对于调用者来说是透明的,调用者看到的只是接口。代理对象则可以封装一些内部的处理逻辑,如访问控制、远程通信、日志、缓存等。比如一个对象访问代理就可以在普通的访问机制之上添加缓存的支持

举个简单的例子,比如中国移动 (真实对象) 和用户 (客户端) 之间的这种业务关系。首先,我们老百姓不可能直接和中国移动总部接触,因而中国移动会将业务的操作权下放到各个省市乡的代理点 ( 代理对象),而用户到代理店办的业务其实就是总部的业务,这样一来便可大大地扩大业务,也能更方便服务用户。

代理模式的分类

静态代理

UML类图


注:图中 SM 表示 ServerManager,其在 Android 中是联系这四大组件的关键。

首先,Server 必须先注册到 SM 中,才能够有机会和 Client 通信,然后 Client 发起请求想要调用 Server 中的方法 add(),然而 ClientServer 处在不同的进程当中。如果没有媒介binder 驱动的帮助,进程间就无法完成通信。因此,透过 binder 的作用,Server 可以给 Client 下发一个代理对象,以便能够调用 Server中的方法。这样以来,Client 就无法知道 Server 的逻辑,而只能调用被 Server 代理出去的方法 add()。这一通信过程,便是跨进程通信。

总结

Java 代理模式的应用还是相当广泛的。对于静态代理模式,我们可以用它来代理 Activity 或者 Fragment 的生命周期方法,定义一个不注册的 ActivityDelegate 或者 FragmentDelegate,这个可能会是比较特别的高级技巧。对于动态代理,涉及到的大多是第三方框架,其中思想很多包含有动态代理。

感谢

Java设计模式之代理模式(Proxy)
JAVA 代理模式(Proxy)
代理模式和Java中的动态代理机制
写给Android App开发人员看的Android底层知识

上一篇 下一篇

猜你喜欢

热点阅读