一.代理模式
(springAOP和SpringMVC面试重点!)
代理模式的分类:
-
静态代理
-
动态代理
(1)静态代理
角色分析
-
抽象角色:一般使用接口或者抽象类来解决
-
真实角色:被代理的角色
-
代理角色:代理真实角色,代理真实角色后,一般会做一些附属操作
-
客户:访问代理对象的人
- 用户只关心接口功能,而不在乎谁提供了功能。上图中接口是 Subject。
- 接口真正实现者是上图的 RealSubject,但是它不与用户直接接触,而是通过代理。
- 代理就是上图中的 Proxy,由于它实现了 Subject 接口,所以它能够直接与用户接触。
- 用户调用 Proxy 的时候,Proxy 内部调用了 RealSubject。所以,Proxy 是中介者,它可以增强 RealSubject 操作。
代码示例
service
public interface service {
public void add();
public void delete();
public void search();
public void update();
}
serviceImpl
public class serviceImpl implements service{
//service service =new serviceImpl();
public void add() {
System.out.println("add");
}
public void delete() {
System.out.println("delete");
}
public void search() {
System.out.println("serach");
}
public void update() {
System.out.println("update");
}
}
proxy
因为设计原则是在尽量不改变源代码的情况下进行修改
//创建对象
private serviceImpl serviceimpl;
public void setServiceimpl(serviceImpl serviceimpl) {
this.serviceimpl = serviceimpl;
}
public void add() {
log("add");
serviceimpl.add();
}
@Override
public void delete() {
log(