首页 > 其他分享 >代理模式

代理模式

时间:2023-04-05 10:34:16浏览次数:33  
标签:对象 Image 代理 模式 fileName public

代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。

在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。

介绍

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

主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。

何时使用:想在访问一个类时做一些控制。

如何解决:增加中间层。

关键代码:实现与被代理类组合。

应用实例:spring aop。

优点:

  • 职责清晰。
  • 高扩展性
  • 智能化

缺点:

  • 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
  • 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

使用场景:按职责来划分,通常有以下使用场景:

  • 远程代理。
  • 虚拟代理。
  • Copy-on-Write 代理。
  • 保护(Protect or Access)代理。
  • Cache代理。
  • 防火墙(Firewall)代理。
  • 同步化(Synchronization)代理。
  • 智能引用(Smart Reference)代理。

注意事项:

  • 适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。
  • 装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。

实现

我们将创建一个 Image 接口和实现了 Image 接口的实体类。ProxyImage 是一个代理类,减少 RealImage 对象加载的内存占用。

ProxyPatternDemo 类使用 ProxyImage 来获取要加载的 Image 对象,并按照需求进行显示。

步骤 1

创建一个接口。

Image.java

public interface Image {
   void display();
}

步骤 2

创建实现接口的实体类。

RealImage.java

public class RealImage implements Image {
 
   private String fileName;
 
   public RealImage(String fileName){
      this.fileName = fileName;
      loadFromDisk(fileName);
   }
 
   @Override
   public void display() {
      System.out.println("Displaying " + fileName);
   }
 
   private void loadFromDisk(String fileName){
      System.out.println("Loading " + fileName);
   }
}

ProxyImage.java

public class ProxyImage implements Image{
 
   private RealImage realImage;
   private String fileName;
 
   public ProxyImage(String fileName){
      this.fileName = fileName;
   }
 
   @Override
   public void display() {
      if(realImage == null){
         realImage = new RealImage(fileName);
      }
      realImage.display();
   }
}

步骤 3

当被请求时,使用 ProxyImage 来获取 RealImage 类的对象。

ProxyPatternDemo.java

public class ProxyPatternDemo {
   
   public static void main(String[] args) {
      Image image = new ProxyImage("test_10mb.jpg");
 
      // 图像将从磁盘加载
      image.display(); 
      System.out.println("");
      // 图像不需要从磁盘加载
      image.display();  
   }
}

原文链接:菜鸟教程

标签:对象,Image,代理,模式,fileName,public
From: https://www.cnblogs.com/z-dk/p/17288909.html

相关文章

  • 配置keepalived和LVS的DR模式双机热备
    步骤:Firewalld防火墙配置IP地址,LVS主服务器和从服务器配置IP地址修改内核参数,配置web服务器IP地址,配置NFS共享存储服务器IP地址,客户端配置IP地址搭建共享存储配置允许web服务器连接当前NFS存储服务器,安装配置网站服务器连接共享存储安装配置keepalived加LVS的DR模式双机热备配置LVS......
  • Ardalis.Specification 规范模式
    概述规范模式将查询逻辑封装在它自己的类中,这有助于类遵循单一职责原则(SRP)并促进常见查询的重用。规范可以独立进行单元测试。当与Repository模式结合使用时,它还可以帮助防止它随着太多额外的自定义查询方法而增长。规范通常用于利用领域驱动设计的项目。好处一般来说,规范模......
  • 开启未来出行新模式,汽车以太网技术应用解析
    科技不断发展,汽车行业也在不断更新换代,越来越多的汽车开始应用以太网技术,实现智能化、网络化和信息化的升级。一、汽车以太网技术简介以太网技术是一种常见的局域网技术,可以实现高速数据传输。在汽车领域中,以太网技术被广泛应用于车载电子系统之间的通信和数据传输,例如车载娱乐......
  • ASEMI代理AD5934YRSZ-REEL7原装ADI车规级AD5934YRSZ-REEL7
    编辑:llASEMI代理AD5934YRSZ-REEL7原装ADI车规级AD5934YRSZ-REEL7型号:AD5934YRSZ-REEL7品牌:ADI/亚德诺封装:SSOP-16-208mil批号:2023+安装类型:表面贴装型AD5934YRSZ-REEL7汽车芯片AD5934YRSZ-REEL7特征可编程输出峰间激励电压至最大频率100kHz具有串行I2C的可编程频率扫......
  • python文件操作:r、w、a、r+、w+、a+和b模式
    对文件操作的基本步骤f=open('a.txt','r',encoding='utf-8')data=f.read()print(data)f.close()文件的打开和关闭使用open()、close()函数,文件刚打开时光标在最前面。open()函数的第一个参数为要打开的文件名,默认路径为这个脚本所在路径;第二个参数为打开模式,第三个参数为编......
  • 利用bat文件在命令行进行代理切换
    命令行里,用python也好,用scoop也好,用git也好,总是需要用代理搞一下。看到有篇博客写了一个简单的函数,用来做命令行的开关,于是我也仿着人家写了一个bat,用来做cmd的代理开关。其中遇到了一些小坑,稍微趟了一下,哎,可能powershell就没这么多破事了吧。批处理的语法实在是太原始了,脑壳......
  • 单例模式的优缺点和使用场景
     首先介绍一下单例模式:    单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放......
  • 大数据时代数据化转型的多种模式
    传统企业正在面临IT新技术的挑战,“云大物移”已经成了高频出现的热词,传统企业们愈发清晰地感受到IT的重要性与挑战。传统企业有着数十年积累的宝贵资产,包括客户关系、数据、品牌形象、供应链、渠道等等,要在互联网时代的竞争环境中占得一席之地,靠的不是突破最高精尖的技术领域,而是以......
  • 老代码考古,seajs为什么能够和CMD一样同步模式的方式使用require()方法
    我们知道在服务端的node可以同步block的方式加载别的js库文件,在服务端使用会block的require()函数来加载,就是所谓的CMD、CommonJS规范。而在浏览器端里的js则因为网络延迟等各种因素,不能使用同步block方式加载js库,而是异步回调callback加载的方式,也就是所谓的AMD模块规范。那么......
  • windows 主机代理服务器搭建
    https://www.php1.cn/detail/QiaoMiaoDiBa_win_18b100da.html0x01背景 在现实情景中,我们仅有一台windows主机可以上网(在公司的生产环境、测试环境、各种其他场景下,由于各种安全策略或者上网限制,其他服务器均无法上网。但是我们在测试、生产中,可能需要其他服务器联网获取更新......