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.png3.模式中包含的角色和职责
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。
扫描添加关注