版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yaorongke/article/details/82999569
1.定义
代理模式,给目标对象提供一个代理对象,由代理对象控制对目标对象的引用,类似于生活中的中介。
2.作用
有些情况下,客户端类不能直接引用目标对象,这时可以通过代理对象间接访问目标对象。
3.模式角色
- 抽象对象:声明真实对象需要让代理对象帮忙做的事;
- 代理对象:通过代理类创建真实对象实例并访问其方法;
- 真实对象:即目标对象。
4.实现方法
a. 创建抽象对象。
/**
* 代理模式 - 抽象对象接口, 声明真实对象需要让代理对象帮忙做的事
*
* @author rkyao
* @date 2018/9/11
*/
public interface AbstractObject {
void doSomething();
}
b. 创建真实对象类。
/**
* 代理模式 - 真实对象类
*
* @author rkyao
* @date 2018/9/11
*/
public class RealObject implements AbstractObject {
@Override
public void doSomething() {
System.out.println("do something.");
}
}
c. 创建代理对象类。
/**
* 代理模式 - 代理对象类, 通过代理类创建真实对象实例并访问其方法
*
* @author rkyao
* @date 2018/9/11
*/
public class ProxyObject implements AbstractObject {
@Override
public void doSomething() {
// 引用并创建真实对象实例
RealObject realObject = new RealObject();
// 调用真实对象的方法
realObject.doSomething();
// 代理对象额外做的事情
this.other();
}
public void other() {
System.out.println("do something else.");
}
}
代理模式通过上面a、b、c三步已实现完成,下面演示一下如何使用:
/**
* 代理模式 - 测试类
*
* @author rkyao
* @date 2018/9/11
*/
public class ProxyTest {
public static void main(String[] args) {
AbstractObject proxy = new ProxyObject();
proxy.doSomething();
}
}
代理模式缺陷:客户端和目标对象之间增加了代理对象,会造成系统处理速度变慢;有时候代理模式的实现会比较复杂,增加了系统的复杂性。