代理模式

定义

为另一个对象提供一个替身或占位符以控制对这个对象的访问

使用场景

  • 远程代理为不同地址空间中的对象提供本地代表
  • 虚拟代理根据需要创建昂贵的对象
  • 保护代理控制对原始对象的访问。 当对象应具有不同的访问权限时,保护代理很有用。

典型使用场景

  • 控制对另一个对象的访问
  • 延迟初始化
  • 实现日志记录
  • 方便网络连接
  • 计数对象的引用

例子

那屋可以进入男巫塔,通过代理可以限制进入塔的人数。
男巫对象:

public class Wizard {
  private String name;

  public Wizard(String name) {
    this.name = name;
  }

  public String toString() {
    return name;
  }
}

男巫塔:

public class WizardTower {
  public void enter(Wizard wizard) {
    System.out.println(wizard + " enters the tower.");
  }
}

男巫塔的代理:

public class WizardTowerProxy extends WizardTower {
  private static final int NUM_WIZARDS_ALLOWED = 3;
  private int numWizards;

  @Override
  public void enter(Wizard wizard) {
    if (numWizards < NUM_WIZARDS_ALLOWED) {
      super.enter(wizard);
      numWizards++;
    } else {
      System.out.println(wizard + " is not allowed to enter!");
    }
  }
}

进入塔:

public class App {
  public static void main(String[] args) {
    WizardTowerProxy tower = new WizardTowerProxy();
    tower.enter(new Wizard("Red wizard"));
    tower.enter(new Wizard("White wizard"));
    tower.enter(new Wizard("Black wizard"));
    tower.enter(new Wizard("Green wizard"));
    tower.enter(new Wizard("Brown wizard"));
  }
}

分析

代理模式也可以参考图片预加载:第七章 迭代器模式

参考

iluwatar/java-design-patterns

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

相关阅读更多精彩内容

  • 1 场景问题# 1.1 访问多条数据## 考虑这样一个实际应用:要一次性访问多条数据。 这个功能的背景是这样的;在...
    七寸知架构阅读 3,181评论 1赞 52
  • 引言 在古代《三国志·诸葛亮传》中有这么一句话——“政事无巨细咸于亮。”;在唐代张九龄的《谢赐大麦面状》中还有这么...
    CrazyMO_阅读 506评论 0赞 0
  • 什么是代理模式 代理模式是对象的结构模式。代理模式为其他对象提供一种代理以控制对这个对象的访问。简单来说,在某些情...
    walidake阅读 3,376评论 4赞 27
  • 中秋的夜蒙着雾,月亮也调皮般地藏起自己一个脚。好像在说着,十五的月亮十六才圆满呢。你说我们去看月吧,就去我们城市你...
    WLJHG阅读 330评论 0赞 0
  • 儿童文学课上,读的文本适合年龄越来越小。从爱丽丝梦游仙境这样适合12岁小孩的,到现在的the cat in the...
    去社阅读 563评论 0赞 0

友情链接更多精彩内容