1.静态代理
1.1为其他对象提供一种代理以控制对这个对象的访问,主要解决在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
1.1.1准备一个接口
package com.sj;
/**
* @Author sj
* @Date: 2022/04/05/ 14:31
* @Description
*/
public interface Agent {
/**
* 结婚
*/
void marry();
}
1.1.2真实对象去实现这个结果(专注于自己要干的事情)
package com.sj;
/**
* 真实对象
* @Author sj
* @Date: 2022/04/05/ 14:32
* @Description
*/
public class RealImpl implements Agent {
@Override
public void marry() {
System.out.println("我结婚了");
}
}
1.1.3 代理对象也去实现这个接口(对真实对象加强)
package com.sj;
/**
* 代理对象
* @Author sj
* @Date: 2022/04/05/ 14:33
* @Description
*/
public class ProxyImpl implements Agent {
/**
* 目标对象(就是接口)
*/
private Agent target;
/**
* 构造器注入
* @param target
*/
public ProxyImpl(Agent target) {
this.target = target;
}
@Override
public void marry() {
// 对真实对象的加强
before();
// 真实对象的方法
this.target.marry();
// 后置加强
after();
}
private void after() {
System.out.println("付尾款");
}
private void before() {
System.out.println("选场地");
}
}
1.1.3测试
/**
* 测试
* @param args
*/
public static void main(String[] args) {
// 创建真实对象实例
RealImpl real = new RealImpl();
// 代理对象
ProxyImpl proxy = new ProxyImpl(real);
// 调用代理对象,达到对真实对象的加强
proxy.marry();
}
效果
总结 代理对象可以做很多真实对象不能做的事情,相当于变向的对真实对象进行加强,而真实对象只需要专注自己的事情就好了