当前位置: 首页 > news >正文

《java与模式》学习系列——代理模式

 

一、 代理模式的结构

代理模式给某一个对象提供一个代理对象,并有代理对象控制对原对象的引用。按照使用目的来划分有以下几种:

远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是在本机器中,也可是在另一台机器中。远程代理又叫做大使。

虚拟(Virtual)代理:根据需要创建一个资源消耗较大的对象,使得此对象只在需要时才会被真正创建。

Copy-on-Write代理:虚拟代理的一种。把复制(克隆)拖延到只有在客户端需要时,才真正采取行动。

保护(Protect or Access)代理:控制对一个对象的访问,如果需要,可以给不同的用户提供不同级别的使用权限。

Cache代理:为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。

防火墙(Firewall)代理:保护目标,不让恶意用户接近。

同步化(Synchronization)代理:使几个用户能够同时使用一个对象而没有冲突。

智能引用(Smart Reference)代理:当一个对象被引用时,提供一些额外的操作,比如:将对此对象调用的次数记录下来等。

其结构图如下:

二、 代理模式在java中的应用

Java的动态代理

java.lang.reflect库中提供下面三个类直接支持代理模式:ProxyInvocationHandlerMethod。可以按照下面步骤创建动态代理对象:

1、指明一系列的接口来创建一个代理对象。

2、创建一个调用处理器(Invocation Handler)对象。

3、将这个代理制定为某个其他对象的代理对象。

4、在调用处理器的invoke()方法中采取代理,一方面将调用传递给真实对象,另一方面执行各种需要做的操作。

例如:

 

三、 代理模式与其他模式的关系

适配器模式

适配器模式与代理模式很相像,他们都可视为一个对象提供一种前置的接口。适配器模式的用意是要改变所考虑的对象接口,而代理模式并不能改变所代理的对象的接口。

装饰模式

装饰模式与所装饰的对象具有相同的接口,因此这两种模式也有可能混淆。但是,装饰模式应当为所装饰的对象提供增强功能;而代理模式对对象的使用施加控制,并不提供对象本身的增强功能。

 

 

 

 

相关文章:

  • 5种必知的大数据处理框架技术
  • 《java与模式》学习系列——策略模式
  • mysql:字符串转换为日期类型
  • 《java与模式》学习系列——模版方法模式
  • 《java与模式》学习系列——备忘录模式
  • 向量加减法运算及其几何意义
  • 关于 Java 中 finally 语句块的深度辨析
  • Linux 基础(一)
  • Windows 7 应用程序exe图标丢失的修复
  • 算法导论学习笔记——堆排序
  • 让Docker容器使用静态独立的外部IP(便于集群组建)
  • 算法导论学习笔记——插入排序
  • 本地Git仓库与Github远程仓库同步
  • 算法导论学习笔记——合并排序
  • 算法导论学习笔记——最大优先级队列
  • canvas 五子棋游戏
  • css属性的继承、初识值、计算值、当前值、应用值
  • JavaScript设计模式系列一:工厂模式
  • Java精华积累:初学者都应该搞懂的问题
  • js正则,这点儿就够用了
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • 从重复到重用
  • 二维平面内的碰撞检测【一】
  • 蓝海存储开关机注意事项总结
  • 离散点最小(凸)包围边界查找
  • 如何设计一个比特币钱包服务
  • #android不同版本废弃api,新api。
  • #pragma once
  • #pragma once与条件编译
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • $.ajax()
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (4)(4.6) Triducer
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (一)appium-desktop定位元素原理
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)nsfocus-绿盟科技笔试题目
  • (转载)(官方)UE4--图像编程----着色器开发
  • .gitignore
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .Net中间语言BeforeFieldInit
  • @AutoConfigurationPackage的使用
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600