代理模式:故名思议就是通过其他的对象来代替本身做些事情,比如:买房子的整个过程
1:生成房子的要销售房子,但是会通过 中介公司 销售 他们的房子给客户
其中 中介公司就相当于代理了 该房子的 销售权利,该权利必须 是两方所共有的,而实现不同;所以是接口中的一个方法
就是代理对象和实际对象公用一个接口,而代理必须持有对实际对象的引用
如下:
package com.porxy;
public interface Sell {
public void sellHouse();
}
生成商的如下:
package com.porxy;
public class HouseFactory implements Sell {
public void sellHouse() {
System.out.println("房子生产商被调用了");
}
}
代理商如下:
package com.porxy;
public class SellProxy implements Sell {
// 这个对象可以用ioc来注入
private HouseFactory houseFactory;
// 代理的实体类对象实例化
public SellProxy(HouseFactory houseFactory) {
this.houseFactory = houseFactory;
}
public void sellHouse() {
System.out.println("代理销售房子前作的事情");
houseFactory.sellHouse();
System.out.println("代理销售房子的后作的事情");
}
}
通过代理可以再买房子前后作一些相关的事情,这也就是AOP的大概思路。
测试如下:
package com.porxy;
public class TestProxy {
public static void main(String[] args) {
Sell sell1 = new SellProxy(new HouseFactory());
sell1.sellHouse();
}
}
结果:
结果如下:
代理销售房子前作的事情
房子生产商被调用了
代理销售房子的后作的事情
从中可以看到静态代理的对象时固定的,每一个代理就要写个接口,那样的话
在实际的过程是不可能的所以我们需要的是动态的代理