当前位置: 萬仟网 > IT编程>软件设计>设计模式 > 设计模式——代理模式【Head First 设计模式】

设计模式——代理模式【Head First 设计模式】

2020年11月12日  | 萬仟网IT编程  | 我要评论
代理模式——为另一个对象提供一个替身或占位符以控制对这个对象的访问。类图Subject,它为RealSubject和Proxy提供了接口,通过实现同一接口,Proxy在RealSubject出现的地方取代它。RealSubject是真正做事的对象,它是被proxy代理和控制访问的对象。Proxy持有RealSubject的引用。在某些例子中,Peoxy还会负责RealSubject对象的创建和销毁。客户和RealSubject的交互都必须通过Proxy。因为Proxy和RealSubject实现相

代理模式——为另一个对象提供一个替身或占位符以控制对这个对象的访问。
类图
在这里插入图片描述

Subject,它为RealSubject和Proxy提供了接口,通过实现同一接口,Proxy在RealSubject出现的地方取代它。
RealSubject是真正做事的对象,它是被proxy代理和控制访问的对象。
Proxy持有RealSubject的引用。在某些例子中,Peoxy还会负责RealSubject对象的创建和销毁。客户和RealSubject的交互都必须通过Proxy。因为Proxy和RealSubject实现相同的接口(Subject),所以任何用到RealSubject的地方,都可以用Proxy取代。Proxy也控制了对RealSubject的访问。在某些情况下,我们可能需要这样的控制。这些情况包括RealSubject是远程的对象,RealSubject创建开销大,或RealSubject需要被保护。
举例展示
在这里插入图片描述
代码实现
1.创建接口

public interface Image {
   void display();
}

2.真实类

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);
   }
}

3.代理类

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();
   }
}

4.测试类

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

Displaying test_10mb.jpg
***/

总结
1.代理模式为另一个对象提供代表,以便控制客户对对象的访问,管理访问的方式有许多种。
2.远程代理管理客户和远程对象之间的交互,虚拟代理控制访问实例化开销大的对象,保护代理基于调用这控制对象方法的访问。
3.代理在结构上类似装饰者,但是目的不同。装饰者模式为对象加上行为,而代理则是控制访问。
如有错误欢迎评论指正。

本文地址:https://blog.csdn.net/Aquaman_/article/details/109638747

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
Copyright © 2017-2020  萬仟网 保留所有权利. 粤ICP备17035492号-1