美文网首页
Android中的代理模式

Android中的代理模式

作者: 0dp | 来源:发表于2017-01-14 13:34 被阅读0次

    1.简介
    代理模式(Proxy Pattern)是GoF(Gang of Four) 23种Java常用设计模式之一。代理模式的定义:Provide a surrogate or placeholder for another object to controlaccess to it(为其他对象提供一种代理以控制对这个对象的访问)。使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象),并且可以在不改变目标对象的情况下添加一些额外的功能。


    2.UML类图

    QQ图片20170114132948.png

    3.模式中包含的角色和职责
    Subject:抽象主题角色,抽象主题类可以是抽象类,也可以是接口,是一个最普通的业务类型定义,无特殊要求。
    RealSubject:具体主题角色,也叫被委托角色、被代理角色。是业务逻辑的具体执行者。
    Proxy:代理主题角色,也叫委托类、代理类。它把所有抽象主题类定义的方法给具体主题角色实现,并且在具体主题角色处理完毕前后做预处理和善后工作。(最简单的比如打印日志)

    4.Demo演示
    demo介绍:秘书充当代理角色帮老板处理各种事情,在demo里面的是秘书帮老板(马云、马化腾)发工资、写文件,当然了要添加什么事件直接在接口类规定就行。
    ①项目结构


    ②Boss接口类(全部老板有的共性,比如发工资和写文件等)
    

    public interface Boss {
    /** * 老板的共性 */
    void writeFile();//写文件
    void payoff();//发工资
    }

    ③具体老板(马化腾)
    

    public class MaHuaTeng implements Boss {
    @Override public void writeFile() {
    Log.i("proxy","MaHuaTeng--->writeFile");
    }
    @Override public void payoff() {
    Log.i("proxy","MaHuaTeng--->payoff");
    }
    }

    ④具体老板(马云)
    public class MaYun implements Boss {
    @Override public void writeFile() {
    Log.i("proxy","MaYun--->writeFile");
    } @Override public void payoff() {
    Log.i("proxy","MaYun--->payoff");
    }
    }

    ⑤秘书
    public class Secretary implements Boss {
    private final Boss boss;
    public Secretary() {
    this.boss=new MaHuaTeng();
    }
    //这里可能会有人觉得奇怪,为什么还要这个参数,后面会解释
    public Secretary(Boss boss) {
    this.boss=boss;
    }
    @Override
    public void writeFile() {
    this.boss.writeFile();
    }
    @Override
    public void payoff() {
    this.boss.payoff();
    }
    }

    ⑥实体类
    public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Secretary secretary = new Secretary();
    secretary.writeFile();//秘书代马化腾写文件
    secretary.payoff();//秘书代马化腾发工资
    Secretary mayun_sec = new Secretary(new MaYun());
    mayun_sec.writeFile();//秘书帮马云写文件
    mayun_sec.payoff();//秘书帮马云发工资 }
    }
    ps:严格意义上来讲,带Boss参数那个构造方法不是太合理的,因为用的时候就会暴露了被代理人,只有像无参数构造那样才真正算符合,本文是为演示效果才写的对比。

    演示效果:


    ps:如有不恰当的地方,欢迎指出O(∩_∩)O。


    扫描添加关注

    相关文章

      网友评论

          本文标题:Android中的代理模式

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