美文网首页
代理模式之Binder

代理模式之Binder

作者: wa11e | 来源:发表于2017-11-03 10:44 被阅读0次

    概念

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

    举个栗子

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

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

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

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

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

    结语

    有错请指出,谢谢.

    学无止境.

    相关文章

      网友评论

          本文标题:代理模式之Binder

          本文链接:https://www.haomeiwen.com/subject/fpzzpxtx.html