代理模式
代理模式就是为其他对象提供一种代理以控制对这个对象的访问
举个例子就是:同学A找你帮他送礼物给隔壁班的女生。
同学A为追求者, 你为代理者 , 隔壁女生为目标。
行为接口:
public interface GiveGift {
void GiveFlowers();
void GiveDolls();
}
追求者:
public class Prusuit implements GiveGift {
Girl mm ;
public Prusuit(Girl mm){
this.mm = mm;
}
@Override
public void GiveFlowers() {
System.out.println(mm.getName()+",送你花");
}
@Override
public void GiveDolls() {
System.out.println(mm.getName()+",送你玩具");
}
}
代理者:
public class Proxy implements GiveGift{
Prusuit prusuit;
public Proxy(Girl mm){
prusuit = new Prusuit(mm);
}
@Override
public void GiveFlowers() {
prusuit.GiveFlowers();
}
@Override
public void GiveDolls() {
prusuit.GiveDolls();
}
}
隔壁女生:
public class Girl {
public String Name;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
实现类:
public class aplicationTest {
public static void main(String[] agrs){
Girl mm = new Girl();
mm.setName("花花");
Proxy proxy = new Proxy(mm);
proxy.GiveFlowers();
proxy.GiveDolls();
}
}
运行结果:
花花,送你花
花花,送你玩具
由此可见女生通过代理者收到了来自同学A的礼物。
代理模式的应用场景:
- 远程代理
- 虚拟代理
- 安全代理
- 智能指引
(1)远程代理:
为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
(2)虚拟代理:
根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
(3)安全代理:
用来控制真实对象访问时的权限。
(4)智能指引:
当调用真实的对象时,代理处理另外一些事。