前言
开场
一位穿着蓝色衬衫,牛仔裤,拿着一个白色保温杯的中年男子急匆匆地坐在你对面,看样子是项目上的东西很急,估摸面试时间不会太长,这样一想心情放松了许多…(后来我就被打脸了)
面试开始
面试官:小伙子,我看你的简历上说精通java基础对吧,那我先简单来问几个java基础。
好的好的,面试官你问。(一听到简单两个字就内心窃喜…)
面试官:你知道Java中有个东西叫代理吗?
知道知道,代理就是通过代理对象去访问实际的目标对象,比如我们在生活中租房,可以直接找房东,也可以通过某些租房平台去租房,通过租房平台的这种方式就是代理。在java中这种租房平台就被叫做代理类,代理类不仅能实现目标对象,还能增加一些额外的功能。据我所知java中的代理方式有静态代理和动态代理。(这个时候面试官很大概率会问你这两种代理模式)。
面试官:没想到你还能通过生活中的现象去理解代码,不错不错,我看你提到了静态代理和动态代理,那你给我说说什么是静态代理吧
(果然问了,还好我做了准备)静态代理就是在代码运行之前,这个代理类就已经存在了。还是以上面的租房为例,在代码中会首先创建一个通用的租房接口:
public interface Room {
void rent();
}1.2.3.
然后需要有一个被代理的类(或者称为真实的类)和一个代理类:
public class RealRoom implements Room {
private String roomname;
public RealRoom(String roomname) {
this.roomname = roomname;
}
public void rent() {
System.out.println("租了"+roomname);
}
}1.2.3.4.5.6.7.8.9.
代理类如下:
public class ProxyClass implements Room {
RealRoom realRoom;
public ProxyClass(RealRoom realRoom) {
this.realRoom = realRoom;
}
public void rent() {
System.out.println("租房前收取中介费");
realRoom.rent();
System.out.println("租房后收取服务费");
}
}1.2.3.4.5.6.7.8.9.10.11.
代理类可以在不改变被代理对象的情况下增加功能,最后我们测试一下这个静态代理:
public class Main {
public static void main(String[] args) {
RealRoom realRoom =new RealRoom("碧桂园");
ProxyClass proxyClass=new ProxyClass