• 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

      

  • 相关阅读:
    DOCK-SWARM
    springMVC上传和下载文件
    生成任意内容任意类型的文件
    配置监听(系统启动和关闭时运行的程序)
    配置过滤器
    读取文件内容(TXT之类的文件)
    读取properties文件中的内容
    时间戳转时间字符串和时间
    启动Service的时候报错unable to install breakpoint in
    java后台调用接口并获取返回值
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7750324.html
Copyright © 2020-2023  润新知