Java设计模式---代理模式

前言

这几天接触了几种设计模式,才知道原来Java还能这样深奥,今天又接触了一种新的设计模式--代理模式,可以简单的理解为中介,当用户想购买房子的时候就得通过房产中介来寻找适合我们需求的房子,然后才能购买,这就是生活中经理人的一种概念。
官方解释:在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。

介绍

意图:为其他对象提供一种代理以控制对这个对象的访问。
主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
何时使用:想在访问一个类时做一些控制。
如何解决:增加中间层。
关键代码:实现与被代理类组合。
优点: 1、职责清晰。 2、高扩展性。 3、智能化。
缺点: 1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

静态代理

定义接口类

public interface Image {
   void display();
}

创建实现接口的实体类

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

创建实现接口的实体类。

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

测试主类

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

运行结果

Loading test_10mb.jpg
Displaying test_10mb.jpg

Displaying test_10mb.jpg
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 定义 代理模式是对象的结构模式。代理模式给某一个对象提供代理对象,并由代理对象控制对源对象的引用。 代理模式的结构...
    步积阅读 6,611评论 0 1
  • 代理 在谈代理模式之前,有必要先了解什么是代理。其实代理在日常生活中很常见。比如,海外商品备受国人青睐,但一般人(...
    Tomandy阅读 342评论 0 0
  • 代理模式定义:对其他对象提供一种代理以控制对这个对象的访问。 代理模式的主要作用为其他对象提供一种代理以控制对这个...
    怡红快绿阅读 305评论 0 0
  • 最近看到一篇关于讲代理的文章,接触到了一些jdk动态代理,然后写一篇文章加深下记忆。主要讲静态代理和动态代理,通俗...
    浪漫宇宙与人间日常阅读 360评论 0 0
  • 真正的共赢 是将优秀的资源 完美的整合在一起 实现每一个个体的利益的同时 完成一个宇宙更大的愿景 也许我们每个个体...
    光行者Vivi阅读 265评论 0 0

友情链接更多精彩内容