一、基本概念
1.1 定义
为其他对象提供一种代理以控制对这个对象的访问。
1.2 例子
代理模式代理模式的角色分为以下几种:
- 抽象主题类
Subject
:声明真实主题与代理的共同接口方法。
/**
* 抽象主题类。
*
* @author lizejun
**/
public abstract class Subject {
/**
* 业务方法。
*/
public abstract void visit();
}
- 真实主题类
RealSubject
:定义了代理所表示的真实对象,由其执行具体的业务逻辑方法,客户类通过代理类间接地调用真实主题类中定义的方法。
/**
* 实现抽象主题的真实主题类。
*
* @author lizejun
**/
public class RealSubject extends Subject {
@Override
public void visit() {
Log.d("RealSubject", "visit()");
}
}
- 代理类
ProxySubject
:该类持有一个对真实主题类RealSubject
的引用,在其所实现的接口方法中调用真实主题类中相应的接口方法执行。
/**
* 代理类。
*
* @author lizejun
**/
public class ProxySubject extends Subject {
private Subject mSubject;
public ProxySubject(Subject subject) {
mSubject = subject;
}
@Override
public void visit() {
mSubject.visit();
}
}
1.3 代理模式的使用场景
当无法或不想直接访问某个对象或访问某个对象存在困难时,可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象 需要 实现相同的接口。
1.4 代理模式优缺点
优点
- 协调调用者和被调用者,降低系统的耦合。
- 起到中介的作用,保护目标对象。
缺点
- 需要额外的工作。
- 在调用者和真实对象之间增加了代理对象,有可能导致请求变慢。
二、Android 源码
在之前的文章中,我们已经在源码当中接触过两种代理模式,这里就不再重复说明了,有兴趣的可以看下面这两篇文章:
三、项目应用
待补充。
四、参考文献
- <<
Android
源码设计模式 - 解析与实战>>
网友评论