静态代理模式
- 什么是代理?
- 代理就是像是房产中介,婚庆公司一样。房产中介代理租房这个业务,婚庆公司代理别人结婚活动。
- 为什么要用代理?
- 就像房产中介,如果你有房源你自己也可以出租房屋,在贴个小广告宣传一下,但是效率很低,不一定有人会来租你的房子,但你把房源信息交给房产中介给你集中管理,就省事了,可以更好地实现出租房屋这个需求。婚庆公司同理,交给他们,他们有资源,把婚礼办的更漂亮。
代码示例
- 租房接口
public interface Renting {
public void Rent();//租房
}
- 租户
public class Tenant implements Renting {
private String name;
public void setName(String name) {
this.name = name;
}
public void Rent() {
System.out.println("--"+name+"出租房");
}
}
- 代理
public class RentProxy implements Renting {
private Renting rent; //要出租房的租户
public void setRent(Renting rent) {
this.rent = rent;
}
public void Rent() {
this.methodProxy();
rent.Rent();
}
public void methodProxy(){
System.out.println("代理出租房屋");
}
}
- 测试
public class ProxyTest {
public static void main(String[] args) {
Tenant tenant = new Tenant();
tenant.setName("jack");
tenant.Rent();//租户单独出租房
RentProxy rentProxy = new RentProxy();
rentProxy.setRent(tenant);
rentProxy.Rent();//代理给他出租房
}
}
- 总结
- 最终两个
Rent()
方法都能达到出租房屋的目的,但是代理可在不改动原租户代码的情况下,在Rent()
前后加一些处理达到增强原租户Rent()
方法。 - 代理和租户都要实现同一个租房接口,代理需要提供一个租户注册的方法,也可以叫注入方法,可以是
set
注入也可以是构造方法注入。 - 这里有个知识点:我们经常用的线程
Ranable
接口就是租房接口,而Thread
就是代理商,而我们需要实现Ranable
接口重写run()
方法,我们是租户。我们在使用线程时是:
new Thread( ()-> { System.out.println("线程一"); }).start;
查询Thread源码发现:
public
class Thread implements Runnable {
...
}
没错就是静态代理模式。