代理模式的一句话解释就是:真实类和代理类共同实现一个接口,客户端直接调用代理类。代理类内部调用实现类
类结构: 1 抽象主题角色:可以是抽象类也可以是接口。
public interfece Subject{
// 定义公共的方法
public void request();
}
2 真实主题角色
也就是“一句话解释”里面的真实类。是实现基础业务逻辑的地方
public class RealSubject implements Subject {
@Override
public void request() {
// 业务代码
}
}
3 代理类
public class Proxy implements Subject {
private Subject subject;
public Proxy() {
subject = new RealSubject();
}
@Override
public void request() {
// 调用真实角色的方法
this.subject.request();
}
}
当然了, 这里可以通过构造器传入一个Subject对象,来代理指定的对象。
扩展 1 切面可以在代理类中增加额外的处理代码,实现“切面”的功能。比如,在调用真实角色的方法前,可以添加before
或after
方法:
public class Proxy implements Subject {
private Subject subject;
public Proxy() {
subject = new RealSubject();
}
@Override
public void request() {
this.before();
// 调用真实角色的方法
this.subject.request();
this.after();
}
private void before() {
// 调用前做一些事情
}
private void after() {
// 调用后做一些事情
}
}
这样做有什么好处?如果做过WEB开发的同学应该都听说过“面向切面编程”。面向切面编程,可以很方便地做日志处理、权限拦截等功能。
感谢您的阅读,若您喜欢,可以点击下方的的“推荐”支持我。谢谢!
也可以关注我的慕课账号,会经常更新Java、算法、Vue开发方面的文章哦~