代理模式之Binder

概念

为其它对象提供一种代理以控制对这个对象的访问

举个栗子

小黄想要追求小红,但是不认识小红,刚好他的朋友小李认识小红,小黄通过小李去追求小红,这个过程就是代理模式.

来看看UML图.

代理模式之Binder_第1张图片
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模式.那么可以这么理解,有两个进程ClientServer,,谁请求谁就是进程Client,谁被请求谁就是进程Server.但是我们并没有权限去自己访问Server,而是通过Binder去代替我们去请求Server,然后返回Server的代理,我们通过这个代理去操作,这样通过代理的方式无疑确保了系统的安全性.

否则以Android剪切板为栗,如果不是通过代理去访问,而是自己拥有访问的权限,我们在自己的APP中去修改剪切板,随之改变的,是整个系统,所有APP的剪切板都会改变,无疑这样是不允许的.而通过代理,就算你改变了这个APP中的剪切板,但是并不影响其他的APP.

比如说,我现在要请求服务中的一个add方法,我需要通过Binder去请求SM(ServiceManager),然后返回这个add方法的代理.看图说话.

代理模式之Binder_第2张图片
image

我们可以非常清晰地看到这个代理的全过程.

结语

有错请指出,谢谢.

学无止境.

你可能感兴趣的:(代理模式之Binder)