JAVA 设计模式 代理模式

用途

代理模式 (Proxy)

为其他对象提供一种代理以控制对这个对象的访问

代理模式是一种结构型模式

结构

图-代理模式结构图

Subject : 定义了 RealSubject 和 Proxy 的公共接口,这样就在任何使用 RealSubject 的地方都可以使用 Proxy 。

abstract class Subject {
 public abstract void Request();
 }

RealSubject : 定义 Proxy 所代表的真实实体。

class RealSubject extends Subject {
     @Override
 public void Request() {
         System.out.println("真实的请求");
     }
 }

Proxy : 保存一个引用使得代理可以访问实体,并提供一个与 Subject 的接口相同的接口,这样代理就可以用来替代实体。

class Proxy extends Subject {
 private RealSubject real;
 
     @Override
 public void Request() {
 if (null == real) {
             real = new RealSubject();
         }
         real.Request();
     }
 }

应用场景

1、远程代理

为一个远程对象在不同地址空间提供本地化代表。

2、虚拟代理

根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。

3、安全代理

用来控制真实对象的访问权限。

4、智能指引

是指当调用真实对象时,代理处理另外一些事。

要点

代理模式介绍了一种访问对象的间接等级。

一个远程代理可以隐藏一个对象在不同地址空间的细节。

一个虚拟代理可以根据需要最优化创建对象的开销。

而安全代理和智能指引都允许访问对象的同时处理其他事务。

推荐

本文属于 JAVA设计模式系列

参考资料

《大话设计模式》《HeadFirst设计模式》

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数值分析与有限元编程

Fortran知识|代码错误(input conversion error)

如图所示,提示:input conversion error ? 此时遇到了异常的转换错误。可能是输入数据类型与程序所声明变量类型不一致(比如输入2.5,对应变...

3466
来自专栏超然的博客

前端必知的ajax

1. load( url, [data], [callback] ) :载入远程 HTML 文件代码并插入至 DOM 中。

1184
来自专栏前端架构

javascript在html页面中的加载与执行顺序

通常来说,浏览器对于Javascript的运行有两大特性:1)载入后马上执行,2)执行时会阻塞页面后续的内容(包括页面的渲染、其它资源的下载)。于是,如果有多个...

762
来自专栏nnngu

01 Spring Boot 的简单配置和使用

Spring Boot 简介 使用 Spring Boot 可以让我们快速创建一个基于 Spring 的项目,而让这个 Spring 项目跑起来我们只需要很少的...

3155
来自专栏星回的实验室

js重修课[六]:客户端JavaScript一些琐事

562
来自专栏刘君君

Spring Boot配置属性

2536
来自专栏闻道于事

JavaWeb(一)JSP原理,组成

JSP(Java sever pages):一种用于开发动态web页面(资源)的技术。 jsp页面是在服务器上运行的一个页面,一个jsp页面就是一个类。写jsp...

2938
来自专栏lestat's blog

tp3.2.3实现支持点击排序

假设: Admin/Home/Controller/BaseController.class.php是一个基础控制器 $current_params和$in是两...

3023
来自专栏坚毅的PHP

mysql复制学习一

mysql复制传统上是基于语句的复制,5.0实现了基于行的复制。基于语句复制将执行语句及执行信息写入二进制日志中。 二进制日志包含 binlog和索引文件。bi...

3459
来自专栏张戈的专栏

Linux:awk命令详解

? 简单使用: awk :对于文件中一行行的独处来执行操作 。 awk -F :'{print $1,$4}'   :使用‘:’来分割这一行,把这一行的第一...

3697

扫码关注云+社区