美文网首页
设计模式之Proxy模式

设计模式之Proxy模式

作者: 水沉浓 | 来源:发表于2018-08-15 00:32 被阅读0次

Proxy 模式

意图

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

动机

对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化。

应用场景

代理模式主要用于当我们需要一个简单对象来表示一个复杂对象的情形。如果创建对象的开销很大,那么可以==推迟其创建==,并使用一个简单对象来代理其功能直到必须立即创建的时候。这个简单对象就可以称为复杂对象的代理。


UML类图如下:

Proxy.jpg

参与者与协作者:

  • 抽象角色(Subject):它是一个由真实角色实现的接口,并能够表征真实角色的功能。该接口同时也必须由代理角色实现,这样代理角色能够用于所有真实角色所能使用的地方。
  • 代理角色(Proxy):它维护了能够允许代理角色访问真实角色的引用。代理角色与真实角色都实现了同一个接口,这样代理角色就能代替真实角色,实现对真实角色的访问控制并负责数据的创建和删除。根据代理的类型,其还能负责其他的职责。
  • 真实角色(RealSubject):这是代理角色所代表的真实对象。

代码示例:

假如我们想要在电子邮件中附加一张图片。而添加一张照片并发送是一件耗费大量资源的操作。

这时我们使用代理模式,让我们能够在确实需要加载图片时才对它进行创建和初始化。

  1. 首先,我们创建一个能够被真实对象和代理对象实现的通用接口
public interface Image {
   void showImage();
}
  1. 建立一个真实图片类实现上述接口
public class RealImage implements Image {
 
   private URL url;
 
   public RealImage(URL url){
      this.url = url;
      loadImage(url);
   }
 
   @Override
   public void showImage() {
      System.out.println("Displaying " + url.getFile());
   }
 
   private void loadImage(URL url){
      System.out.println("Loading " + url.getFile());
   }
}

  1. 编写代理类,提供对真实图片类的访问。
public class ProxyImage implements Image{
 
   private RealImage realImage;
   private URL url;
 
   public ProxyImage(URL url){
      this.url = url;
   }
 
   @Override
   public void showImage() {
      if(realImage == null){
         realImage = new RealImage(url);
      }
      realImage.showImage();
   }
} 
  1. 测试
public class ProxyTest {
   
   public static void main(String[] args) {
      Image image = new ProxyImage(new URL("test.jpeg"));
 
      // 加载图片
      image.showImage(); 
      System.out.println("");
      // 图像加载过,则不需再次加载
      image.showImage();  
   }
}

相关文章

  • 设计模式之Proxy模式

    Proxy 模式 意图 为其他对象提供一种代理以控制对这个对象的访问。 动机 对一个对象进行访问控制的一个原因是为...

  • 设计模式之结构型模式

    3、设计模式之结构型模式 3.1 代理(Proxy)模式 3.1.1 引入案例: 前阵子疫情期间,为了打发时间竟然...

  • 设计模式之代理模式2

    设计模式之代理模式运用 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对...

  • 设计模式之代理模式

    Proxy Pattern 代理模式(Proxy Pattern)被称为委托模式,属于结构性设计模式的一种 定义为...

  • 设计模式之代理模式(Proxy模式)

    代理模式的引入 代理模式的实例程序 代理模式的分析 代理模式的引入 Proxy是代理人的意思,指的是代替别人进行工...

  • 设计模式 之 Proxy

    目录 Proxy Static-Proxy Dynamic-Proxy Proxy与反射 Proxy与依赖注入 P...

  • 设计模式之代理模式(Proxy)

    1. 什么是代理模式? 为其他对象提供一种代理,以控制对这个对象的访问 2. 代理模式用来干什么? 现实中的例子:...

  • 设计模式之代理模式 - proxy

    当你想控制外界对某个类的对象的直接访问时,可以使用代理模式. 定义 为其他类提供一种代理以控制外界对这个类的对象的...

  • 设计模式之代理(Proxy)模式

    什么是代理模式?   代理模式(Proxy Pattern)是程序设计中的一种设计模式。所谓的代理者是指一个类别可...

  • 026android初级篇之ActivityManager的Pr

    026android初级篇之ActivityManager的Proxy模式初识 Proxy模式 意图: 适用性: ...

网友评论

      本文标题:设计模式之Proxy模式

      本文链接:https://www.haomeiwen.com/subject/gltibftx.html