概念
为其它对象提供一种代理以控制对这个对象的访问
举个栗子
小黄想要追求小红,但是不认识小红,刚好他的朋友小李认识小红,小黄通过小李去追求小红,这个过程就是代理模式.
来看看UML图.

image
先定义一个追求接口
public interface request {
void Flowers();
void Babe();
void Chocolat();
}
让小黄和小李都实现它,
//小黄,追求者
public class Pursuit implements request {
private Girl girl;
public Pursuit(Girl girl){
this.girl = girl;
}
@Override
public void Flowers() {
System.out.println(girl.name + "送花");
}
@Override
public void Babe() {
System.out.println(girl.name + "送芭比");
}
@Override
public void Chocolat() {
System.out.println(girl.name + "送巧克力");
}
}
//小李,代理者
public class Proxy implements request {
private Pursuit pursuit;
public Proxy(Girl girl){
//代理
pursuit = new Pursuit(girl);
}
...request接口
}
//Girl类无所谓,有个名字就成.
Android中的代理模式.
Binder机制
众所周知,Binder存在的原因是为了进程间通讯.我们从进程A去访问进程B时,需要通过Binder机制去访问.
Binder是标准的C/S模式.那么可以这么理解,有两个进程Client和Server,,谁请求谁就是进程Client,谁被请求谁就是进程Server.但是我们并没有权限去自己访问Server,而是通过Binder去代替我们去请求Server,然后返回Server的代理,我们通过这个代理去操作,这样通过代理的方式无疑确保了系统的安全性.
否则以Android剪切板为栗,如果不是通过代理去访问,而是自己拥有访问的权限,我们在自己的APP中去修改剪切板,随之改变的,是整个系统,所有APP的剪切板都会改变,无疑这样是不允许的.而通过代理,就算你改变了这个APP中的剪切板,但是并不影响其他的APP.
比如说,我现在要请求服务中的一个add方法,我需要通过Binder去请求SM(ServiceManager),然后返回这个add方法的代理.看图说话.

image
我们可以非常清晰地看到这个代理的全过程.
结语
有错请指出,谢谢.
学无止境.