Java设计模式(10)——结构型模式之代理模式(Proxy)

一、概述

  概念

  

  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

  

原文地址:https://www.cnblogs.com/jiangbei/p/7750324.html