对于广大男同胞来说,泡妞是一件很正常的事情,然而有些羞答答的男生,却缺乏主动,从而不敢主动出击,而是通过朋友来传递对喜爱的女生的爱慕之情,帮忙送礼物啥的,最后不但没有泡妞成功,反而给朋友泡了心爱的女生,实在悲惨之至,然而,作为程序员的我们,如果学过设计模式,可能就不会烦这种错误,这是一个代理模式的最好体现了,补充一句,代理模式用途很广,前面是开玩笑的哈!如果要实现这个泡妞的过程,我们可以用代码来实现以下。
设计步骤:
第一步:创建一个女生对象。
//妹纸
public class SchoolGirl {
private String name;
public SchoolGirl(){
}
public SchoolGirl(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//送礼物接口
public interface SendPresent {
public void sendFlowers();
public void sendDoll();
public void sendChocolate();
}
//追求者
public class Persuitor implements SendPresent{
private SchoolGirl sg;
private String name;
public Persuitor(String name, SchoolGirl sg) {
this.name = name;
this.sg = sg;
}
public void sendFlowers() {
System.out.println(sg.getName() + "," + this.name + "送你花");
}
public void sendDoll() {
System.out.println(sg.getName() + "," + this.name + "送你布娃娃");
}
public void sendChocolate() {
System.out.println(sg.getName() + "," + this.name + "送你巧克力");
}
}
//代理
public class Proxy implements SendPresent{
private Persuitor persuitor;
public Proxy(SchoolGirl sg) {
this.persuitor = new Persuitor("聪聪", sg);
}
public void sendFlowers() {
//调用真实对象的方法,也可以在调用此方法时进行其它的逻辑处理
persuitor.sendFlowers();
}
public void sendDoll() {
persuitor.sendDoll();
}
public void sendChocolate() {
persuitor.sendChocolate();
}
}
//测试类
public class Test {
public static void main(String[] args) {
SchoolGirl sg = new SchoolGirl("晴晴");
Proxy proxy = new Proxy(sg); //代理
proxy.sendChocolate();
proxy.sendDoll();
proxy.sendFlowers();
}
}
程序运行结果如下:晴晴,聪聪送你巧克力
晴晴,聪聪送你布娃娃
晴晴,聪聪送你花
总结:代理模式在这个程序里面把具体的对象和它需要关联的对象分离开了,通过代理来连接,代理不单可以完成具体的对象的行为,同时可以对具体对象进行一些其他的一些逻辑处理。
代理模式定义:为其他对象提供一个代理以控制对这个对象的访问。
应用场景:
1.远程代理,也就是为一个对象在不同的地址空间提供局部代表,隐藏一个对象
存在于不同地址空间的事实。
2.虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时
间的真实对象。
3.安全代理,用来控制真实对象访问时的权限。
4.智能指引,是指当调用真实的对象时,代理处理另外一些事。