为其余对象提供一种代理以控制对这个对象的访问。java
- Subject:抽象主题类
- 该类额主要职责就是声明真实主题与代理的共同接口方法,该类既能够是一个抽象类也能够是一个接口。
- RealSubject:真实主题类
- 该类也称为被委托类或被代理类,该类定义了代理所表示的真实对象,由其执行具体的业务逻辑方法,而客户类则经过代理类间接地调用真实主题类中定义的方法。
- ProxySubject:代理类
- 该类也称为委托类或代理类,该类持有一个对真实主题类的引用,在其所实现的接口方法中调用真实主题类中相应的接口方法执行,以此起到代理的做用。
- Client:客户类
- 当没法或不想直接访问某个对象或访问某个对象存在困难时能够经过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象和代理对象需实现相同的接口。
public abstract class Subject { /** * 一个普通的业务方法 */ public abstract void visit(); } public class RealSubject extends Subject { @Override public void visit() { // RealSubject中visit的逻辑要求 System.out.println("Real subject!"); } } public class ProxySubject extends Subject { private RealSubject mSubject; // 持有真实主题的引用 public ProxySubject(RealSubject mSubject) { this.mSubject = mSubject; } @Override public void visit() { // 经过真实的主题引用的对象调用真实主题中的逻辑方法 mSubject.visit(); } } public class Client { public static void main(String[] args) { // 构造一个真实主题对象 RealSubject real = new RealSubject(); // 经过真实主题对象构造一个代理对象 ProxySubject proxy = new ProxySubject(real); // 调用代理的相关方法 proxy.visit(); } }
ActivityManagerProxy代理类ide