表面上调用的是代理类的方法,实际上该代理类的方法又调用的真正类的方法,即代理(可以代替真实类的功能)
一、编写一个例子:一个追求者通过代理人向暗恋的女孩送礼物
1.送礼物的行为接口
public interface SendGift {
void giveFlower();
void giveSugar();
}
2.追求者
public class RealLover implements SendGift{
@Override
public void giveFlower() {
System.out.println("送鲜花");
}
@Override
public void giveSugar() {
System.out.println("送糖");
}
}
3.代理人
public class ProxyPeo {
private RealLover realLover=new RealLover();
private SchoolGirl sg;
public SchoolGirl getSg() {
return sg;
}
public void setSg(SchoolGirl sg) {
this.sg = sg;
}
public void giveFlower() {
System.out.print("给"+sg.getName());
realLover.giveFlower();
}
public void giveSugar() {
System.out.print("给"+sg.getName());
realLover.giveSugar();
}
}
4.女孩
public class SchoolGirl {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
5.测试类
public class Test {
public static void main(String[] args) {
SchoolGirl sg=new SchoolGirl();
sg.setName("小芳");
ProxyPeo proxyPeo=new ProxyPeo();
proxyPeo.setSg(sg);
proxyPeo.giveFlower();
proxyPeo.giveSugar();
}
}
输出结果:
总结:
代理模式:为其他对象提供一种代理以控制对这个对象的访问