欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-03 09:49:05
代理模式——为另一个对象提供一个替身或占位符以控制对这个对象的访问。类图Subject,它为RealSubject和Proxy提供了接口,通过实现同一接口,Proxy在RealSubject出现的地方取代它。RealSubject是真正做事的对象,它是被proxy代理和控制访问的对象。Proxy持有RealSubject的引用。在某些例子中,Peoxy还会负责RealSubject对象的创建和销毁。客户和RealSubject的交互都必须通过Proxy。因为Proxy和RealSubject实现相...

代理模式——为另一个对象提供一个替身或占位符以控制对这个对象的访问。
类图
设计模式——代理模式【Head First 设计模式】

Subject,它为RealSubject和Proxy提供了接口,通过实现同一接口,Proxy在RealSubject出现的地方取代它。
RealSubject是真正做事的对象,它是被proxy代理和控制访问的对象。
Proxy持有RealSubject的引用。在某些例子中,Peoxy还会负责RealSubject对象的创建和销毁。客户和RealSubject的交互都必须通过Proxy。因为Proxy和RealSubject实现相同的接口(Subject),所以任何用到RealSubject的地方,都可以用Proxy取代。Proxy也控制了对RealSubject的访问。在某些情况下,我们可能需要这样的控制。这些情况包括RealSubject是远程的对象,RealSubject创建开销大,或RealSubject需要被保护。
举例展示
设计模式——代理模式【Head First 设计模式】
代码实现
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

相关标签: 设计模式 java