Android中的代理模式

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。


扫描添加关注

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 和iOS中类似,Android中也有代理模式。不过让我感到有点奇怪的是它的写法,它居然把interface写在类内...
    Stroman阅读 394评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,886评论 18 139
  • 面向对象的六大原则 单一职责原则 所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于...
    JxMY阅读 964评论 1 3
  • 1 场景问题# 1.1 访问多条数据## 考虑这样一个实际应用:要一次性访问多条数据。 这个功能的背景是这样的;在...
    七寸知架构阅读 3,024评论 1 52
  • 乘着日影斑驳的黄昏 我无声溜进了雨巷 不想把天然的诗意刻意镂雕 更无心目睹那太息般的眼光 只想 也逢着一个像丁香一...
    老师我晕课阅读 170评论 0 5