代理模式

2016-10-22  本文已影响0人  狐尼克朱迪

定义

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

使用场景

典型使用场景

例子

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

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

上一篇下一篇

猜你喜欢

热点阅读