为其他对象提供一种代理以控制这个对象的访问;
Demo:远程追求女孩
理想情况
public class Girl {
public String name;
public Girl (String name) {
this .name = name;
}
}
public class Boy {
Girl gril;
public Boy (Girl gril) {
this .gril = gril;
}
public void pursuit (){
Log.d("meee" ,getClass()+":\n" +"追求:" +gril.name);
}
}
Girl girl = new Girl("小白" );
Boy boy = new Boy(girl);
boy.pursuit();
Demo
public class Girl {
public String name;
public Girl (String name) {
this .name = name;
}
}
public interface IPursuit {
void pursuit();
}
public class Boy implements IPursuit {
Girl gril;
public Boy (Girl gril) {
this .gril = gril;
}
@Override
public void pursuit (){
Log.d("meee" ,getClass()+":\n" +"追求:" +gril.name);
}
}
public class Proxy implements IPursuit {
Boy boy;
public Proxy (Girl girl) {
boy = new Boy(girl);
}
@Override
public void pursuit () {
boy.pursuit();
}
}
Girl girl = new Girl("小白" );
Proxy proxy = new Proxy(girl);
proxy.pursuit();
使用场景
1.远程代理,为一个对象在不同的地址控件提供局部代表.可以实现iyge对象存在于不同地址空间的事实.
2.虚拟代理,根据需要创建一个开销很大的对象时.
3.安全代理,用来控制真实对象访问的权限.
4.智能代理,调用真实的对象时,额外处理一些事情.