zoukankan      html  css  js  c++  java
  • 代理模式

    一个类代表另一个类的功能。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。可以理解为内存中没有这个对象就创建,有就直接返回这个对象。

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

    以获取磁盘中的图片为例,总共分三步:

    • 1、创建一个接口。

      public interface Image {
         void display();
      }
    • 2、创建实现接口的实体类 RealImage。对应代理类:ProxyImage。

      public class RealImage implements Image {
      
          private String fileName;
      
          public RealImage(String fileName) {
              this.fileName = fileName;
              loadFromDisk(fileName);
          }
      
          private void loadFromDisk(String fileName) {
              Log.e("RealImage", "loading " + fileName);
          }
      
          @Override
          public void display() {
              Log.e("RealImage", "Displaying " + fileName);
          }
      }
      public class ProxyImage implements Image {
      
          private String fileName;
          private RealImage realImage;
      
          public ProxyImage(String fileName) {
              this.fileName = fileName;
          }
      
          @Override
          public void display() {
              if (realImage == null) {
                  realImage = new RealImage(fileName);
              }
              realImage.display();
          }
      }
    • 3、当被请求时,使用 ProxyImage 来获取 RealImage 类的对象。

      Image image = new ProxyImage("test_10mb.png");
      // 第一次是new的,图像从磁盘加载
      image.display();
      // 第二次取缓存,图像不需要从磁盘加载
      image.display();
  • 相关阅读:
    学python走过的坑 二 element与elements的却别
    Python 进度条显示
    学python走过的坑一 类的实例化
    shell打印 菱形
    shell打印 倒等腰三角形
    互联网协议入门
    shell应用之批量添加用户实例
    Centos7不修改默认交换分区下添加交换分区
    shell中处理用户输入
    sed命令的介绍
  • 原文地址:https://www.cnblogs.com/cjjjj/p/13588121.html
Copyright © 2011-2022 走看看