一、概述
概念
UML简图
实际使用的场景示例
- 如果那个对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片Proxy来代替真正的图片。
- 如果那个对象在Internet的某个远端服务器上,直接操作这个对象因为网络速度原因可能比较慢,那我们可以先用Proxy来代替那个对象。
现实中的例子比如桌面上的快捷方式,我们点击它,它帮我们找到实际应用程序,它就是一个代理了!
主要角色
抽象主题角色:代理和真实角色的共同接口,以便于代理
真实角色
代理角色
二、实践
抽象角色:
/**
* 抽象共同接口
*
* @author Administrator
**/
public abstract class Subject {
public abstract void method1();
}
真实角色:
/**
* 真实角色
*
* @author Administrator
**/
public class RealSubject extends Subject{
@Override
public void method1() {
System.out.println("real subject");
}
}
代理角色:
/**
* 代理角色
*
* @author Administrator
**/
public class ProxySubject extends Subject{
private Subject subject;
public ProxySubject(Subject subject) {
this.subject = subject;
}
@Override
public void method1() {
System.out.println("proxy subject");
subject.method1();
}
}
客户端使用
/**
* 客户端
* @author Administrator
**/
public class Client {
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
ProxySubject proxySubject = new ProxySubject(realSubject);
proxySubject.method1();
}
}
// 当然可以根据多态性改变一些定义方式
以上就是我们熟知的静态代理,关于静态代理与动态代理的分析,可以参见之前随笔:http://www.cnblogs.com/jiangbei/p/6828086.html