代理模式
三个角色
图片.png抽象主题(Subject)角色
真实主题和代理主题的共同接口,以便在任何可以使用真实主题的地方都可以使用代理主题
/**
* @author Jenson
*/
public interface Subject {
/**
* 定义一个请求方法
*/
public void request();
}
代理主题(Proxy Subject)角色
该角色负责控制对真实主题的引用,负责在需要的时候创建或删除真实主题对象,并且在真实主题角色处理完毕前后做预处理和善后处理工作
/**
* @author Jenson
*/
@Data
public class ProxySubject implements Subject {
private Subject subject;
public <T extends Subject> ProxySubject(Class<T> c) throws IllegalAccessException, InstantiationException {
this.subject = c.newInstance();
}
public void request() {
this.doSomethingBeforeRequest();
subject.request();
this.doSomethingAfterRequest();
}
private void doSomethingBeforeRequest(){
System.out.println("Do Something Before Request...");
}
private void doSomethingAfterRequest(){
System.out.println("Do Something After Request...");
}
}
真实主题(Real Subject)角色
业务逻辑的具体执行者
/**
* @author Jenson
*/
@Data
public class RealSubject implements Subject {
public void request() {
System.out.println("一条只需要关注自身业务的逻辑");
}
}
调用
/**
* @author Jenson
*/
public class ProxyMain {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
Subject subject = new ProxySubject(RealSubject.class);
subject.request();
}
}
代理模式的优点
- 职责清晰
只需关注具体的业务逻辑而不必要关心非本职事务 - 高扩展性
具体角色可随时变化 - 智能化
不懂...
SpringAOP 典型的动态代理
网友评论