为其他对象提供一种代理以控制这个对象的访问;
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.智能代理,调用真实的对象时,额外处理一些事情.