一.定义
代理模式:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
二.角色
1.抽象角色(Subject) :通过接口或者抽象类声明真实角色实现的业务方法。
2.代理角色(Proxy):实现抽象角色,是真实角色的代理。
3.真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
三.使用场景
1.一个对象不能直接访问另一个对象,使用代理做为中介来简洁访问。
2.被访问的对象不像暴露内容时,可以通过代理来隐藏内容。
四.模式分类
代理模式分为动态代理和静态代理
1.动态代理:是在程序运行期间根据反射等机制动态的生成,所以不存在代理类的字节码文件。
2.静态代理:就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。
五.使用案例分析
生活中最常见的代理方式,就是现在很流行的代购,这里我们通过代购奶粉的案例结合代码来分析下代理模式:
案例需求:我需要买一款国外的奶粉,不放心在国内直接买,刚好有朋友在国外,于是想通过朋友代购这款奶粉。
1.抽象角色-实现抽象购买行为:
/**
* 代理模式-抽象角色
*/
public interface IPeople {
void shop();
}
2.真实角色,实现具体的行为
public class My implements IPeople {
@Override
public void shop() {
System.out.print("我想代购在国外买一款奶粉");
}
}
3.代理角色,代理购买奶粉的行为
public class ProxyShop implements IPeople{
IPeople mIpeople;
public ProxyShop(IPeople iPeople){
mIpeople = iPeople;
}
@Override
public void shop() {
System.out.print("我是代购");
mIpeople.shop();
}
}
以上例子简单实现了代理模式的三个角色的应用。
五.代理模式在Android中的应用:
在Android中 activity的管理类ActivityManagerProxy就是使用代理模式。