设计模式之代理模式
为其他对象提供一种代理以控制对这个对象的访问
//被追求者
public class SchoolGirl {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//代理接口
public interface IGiveGift {
void giveDolls();
void giveFlowers();
void giveChocolate();
}
//追求者(实际操作对象)
public class Pursuit implements IGiveGift {
private SchoolGirl mm;
public Pursuit(SchoolGirl mm){
this.mm = mm;
}
@Override
public void giveDolls() {
System.out.println("给"+mm.getName()+"洋娃娃");
}
@Override
public void giveFlowers() {
System.out.println("给"+mm.getName()+"鲜花");
}
@Override
public void giveChocolate() {
System.out.println("给"+mm.getName()+"巧克力");
}
}
//追求者的代理
public class Proxy implements IGiveGift {
private Pursuit gg;
//这里偷梁换柱**************************
public Proxy(SchoolGirl mm){
gg = new Pursuit(mm);
}
@Override
public void giveDolls() {
gg.giveDolls();
}
@Override
public void giveFlowers() {
gg.giveFlowers();
}
@Override
public void giveChocolate() {
gg.giveChocolate();
}
}
//代理模式测试类
@Test
public void proxyPatternTest(){
SchoolGirl mm = new SchoolGirl();
mm.setName("如花");
IGiveGift gg = new Proxy(mm);
gg.giveChocolate();
gg.giveFlowers();
gg.giveDolls();
}
运行结果如下

远程代理:
也就是为一个对象在不同的地址空间提供局部代表。这样,可以隐藏一个对象存在于不同地址空间的事实。
虚拟代理:
是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
安全代理:
用来控制真实对象访问时的权限
智能指引:
是指调用真实的对象时,代理处理另外的一些事。(比如计算真实对象的引用次数)
总结:
代理模式就是在访问对象时引用一定程度的间接性。这种间接性能附加多种用途。
3602

被折叠的 条评论
为什么被折叠?



