设计模式 静态代理模式
1 静态代理模式
1.1 定义
简单来说就是创建一个代理对象(Proxy),只有代理对象能调用目标对象(RealSubject),同时Proxy也实现了目标对象RealSubject的接口(Subject),这就能实现多态。
代理模式的核心是,客户端(Client)要想访问目标对象(RealSubject)的方法时,只能通过代理对象(Proxy)实现。
可以看到代理对象相比目标对象还多了preRequest和afterRequest,这些自定义的方法就能实现对目标对象的方法的增强,这也是springAOP的原理
1.2 手动实现
为了方便学习,代码都写在一个文件下
public class ProxyPattern {
public static void main(String[] args) {
//实例化目标对象
RealSubject realSubject = new RealSubject();
//实例化代理对象
RealSubjectProxy realSubjectProxy = new RealSubjectProxy(realSubject);
//使用代理对象的方法
realSubjectProxy.doWork();
}
}
/**
* 统一接口
*/
interface Subject{
void doWork();
}
/**
* 目标对象
*/
class RealSubject implements Subject{
@Override
public void doWork() {
System.out.println("做了某件事");
}
}
/**
* 代理对象
*/
class RealSubjectProxy implements Subject{
private RealSubject subject;
public RealSubjectProxy(RealSubject subject){
this.subject = subject;
}
/**
* 自定义方法1
*/
public void connection(){
System.out.println("建立连接");
}
/**
* 自定义方法2
*/
public void log(){
System.out.println("日志记录");
}
/**
* 对目标对象的方法进行增强
*/
@Override
public void doWork() {
connection();
subject.doWork();
log();
}
}
1.3 和装饰器模式的区别
代理模式强调代理类对真正办事儿的类的权限控制能力,装饰器强调对旧对象而不是旧类的功能扩展