最近我一直想搞清楚Java中的代理问题。一直都只是听说,还没有真正领教。
于是我就在网上找了一下,说得不是很明白,然后我又在视频里找了一下,有一个叫兄弟连的视频给了介绍,虽然那些风格我不是很喜欢,不过也算是说得明明白白。我同学说马士兵讲得不错,因为看了这个视频,也就不想再找了。
视频里是举了一个形象的例子: 一个妹子请媒婆来给她找一个如意郎君。而这里的媒婆就是我们所说的那个代理类。代理模式是为其它对象提供一种代理以控制对这个对象的访问。说白了,就是说代理类挡在了被代理类前面为被代理类提供一个筛选的功能。这里的媒婆就是起到了这一层筛选的作用。媒婆可按妹子提供的条件为妹子挑选如意郎君,条件成立后,让妹子(被代理人)去相亲。
如下:
ProxyDemo.java
public class ProxyDemo {
public static void main(String[] args) {
Person p = new Person("张三");
Matchmaker mm = new Matchmaker(p);
mm.miai();
}
}
Subject.java
public interface Subject {
public void miai();
}
Matchmaker.java
public class Matchmaker implements Subject{
private Subject subject; // 要代理的目标对象
private boolean flag; // 是否满足条件标记
public Matchmaker(Subject subject) {
this.subject = subject;
}
public void befor(int condition) {
System.out.println("媒人正在为代理人挑选如意郎君 . . .");
if(condition >=165 && condition <=180) { // person给出的筛选条件
System.out.println("已找到合适的人选");
flag = true; // 设置满足条件标记为真
}else{
System.out.println("未找到合适的人选");
flag = false; // 设置满足条件标记为真
}
}
public void after() {
if(flag) System.out.println("本次相亲圆满结束。");
else System.out.println("本次相亲未成功。");
}
@Override
public void miai() {
befor(170); // 传一个身高为170cm的参数
if(flag) subject.miai();
after();
}
}
Person.java
public class Person implements Subject {
private String name;
public Person(String name) {
this.name = name;
}
@Override
public void miai() {
System.out.println(name + "正在相亲中。。。");
}
}
这里的代理人和被代理人都得实现相亲这个主题的接口,因为代理人和被代理人是因为相亲这件事才有代理人与被代理人的这层关系。