代理模式 也称为 委托模式。 其实代理在我们日常生活中并不少见,对于程序员来说最常接触的莫过于代理上网。
定义
为其他对象提供一种代理以控制对这个对象的访问
使用场景
当 无法 或 不想 直接访问某个对象 或 访问某个对象存在困难时 可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象 与 代理对象 需要实现相同的接口。
代理模式UML 类图
代理模式类图角色介绍:
Subject:抽象主题类。
该类的的主要职责是声明 真实主题 与 代理 的共同接口方法。该类既可以是一个抽象类也可以是一个接口。
RealSubject:真是主题类
该类被称为 委托类 或 被代理类,该类定义了代理所表示的真实对象,由其执行具体的业务逻辑方法,而客户类通过代理类 间接 调用真实主题类中定义的方法。
ProxySubject:代理类。
该类持有一个对真实主题类的引用,在其所实现的接口方法中调用真实主题类中相应的接口方法执行,以此起到代理的作用。
Client:客户类,负责使用代理。
代码实现
public interface Subject {
abstract void visit();
}
public class RealSubject implements Subject {
@Override
public void visit() {
System.out.println("---真实委托方法---");
}
}
public class ProxySubject implements Subject {
Subject realSubject;
public ProxySubject(Subject subject){
this.realSubject = subject;
}
@Override
public void visit() {
System.out.println("--执行真实委托方法之前--");
realSubject.visit();
System.out.println("--执行真实委托方法之后--");
}
}
public class Client {
public static void main(String[] args){
Subject real = new RealSubject();
Subject proxy = new ProxySubject(real);
proxy.visit();
}
}
结果:
--执行真实委托方法之前--
---真实委托方法---
--执行真实委托方法之后--
网友评论