美文网首页
设计模式14:代理模式

设计模式14:代理模式

作者: akak18183 | 来源:发表于2017-05-14 04:07 被阅读0次

    代理模式(Proxy DP)为另一个对象提供一个替身或者占位符以控制这个对象的访问(原文:Provide a surrogate or placeholder for another object to control access to it)。
    代理模式一般有三种代理:远程代理,虚拟代理和保护代理(Remote Proxy, Virtual Proxy and Protection Proxy)。
    远程代理是给不同地址空间的对象以一个本地代表。
    虚拟代理用来按需生成昂贵的对象。
    保护代理控制访问权限。

    代码:
    巫师:

    /**
     * 
     * Wizard
     *
     */
    public class Wizard {
    
      private final String name;
    
      public Wizard(String name) {
        this.name = name;
      }
    
      @Override
      public String toString() {
        return name;
      }
    
    }
    

    巫师塔接口:

    /**
     * WizardTower interface
     */
    public interface WizardTower {
    
      void enter(Wizard wizard);
    }
    

    象牙塔,巫师塔的一个实现类:

    /**
     * 
     * The object to be proxyed.
     * 
     */
    public class IvoryTower implements WizardTower {
    
      private static final Logger LOGGER = LoggerFactory.getLogger(IvoryTower.class);
    
      public void enter(Wizard wizard) {
        LOGGER.info("{} enters the tower.", wizard);
      }
    
    }
    

    巫师塔代理:

    /**
     * 
     * The proxy controlling access to the {@link IvoryTower}.
     * 
     */
    public class WizardTowerProxy implements WizardTower {
    
      private static final Logger LOGGER = LoggerFactory.getLogger(WizardTowerProxy.class);
    
      private static final int NUM_WIZARDS_ALLOWED = 3;
    
      private int numWizards;
    
      private final WizardTower tower;
    
      public WizardTowerProxy(WizardTower tower) {
        this.tower = tower;
      }
    
      @Override
      public void enter(Wizard wizard) {
        if (numWizards < NUM_WIZARDS_ALLOWED) {
          tower.enter(wizard);
          numWizards++;
        } else {
          LOGGER.info("{} is not allowed to enter!", wizard);
        }
      }
    }
    

    可以看到,巫师塔代理类的作用就是限制巫师的人数,当人数达到限制时就不允许进入。这个属于保护代理。

    相关文章

      网友评论

          本文标题:设计模式14:代理模式

          本文链接:https://www.haomeiwen.com/subject/lgifxxtx.html