代理模式

代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。

代理模式是对象间的间接通信,间接通信可以给出较低的耦合关系,较强的合作关系,以及微妙的结构和易于复用的设计架构。

 

代理模式的结构:


抽象主题角色:声明了真实主题和代理主题的共同接口,这样一来在任何可以使用真实主题的地方都可以使用代理主题。

代理主题角色:代理主题角色内部有对真实主题的易用,从而可以在任何时候操作真实主题对象。

真实主题角色:定义了代理角色所代表的真实对象

 

红酒代理商和红酒厂商都有销售红酒的职能

  ** 

  *抽象主题角色,定义了真实角色和代理角色的公共接口 

  */  

  public interface SellInterface{  

       public Object sell();  

  }  

 

/** 

*真实主题角色,这里指红酒工厂角色,它实现了SellInterface接口 

*/  

public class RedWineFactory implements SellInterface{  

     public Object sell(){  

         System.out.println("真实主题角色RedWineFactory 被调用了");  

         return new Object();  

     }  

}  

/** 

*代理主题角色,这里指红酒代理商.它除了也要实现了sellInterface接口外,还持有红酒 

*厂商RedWineFactory 对象的引用,从而使它能在调用真实主题前后做一些必要处理

*/  

public class RedWineProxy implements SellInterface{  

     //持有一个RedWineFactory对象的引用  

      private RedWineFactory redWineFactory;  

  

     //销售总量  

      private static int sell_count = 0;  

  

     public Object sell(){  

         if(checkUser()){//在通过代理主题角色,我们可以在真实主题角色被调用前做一些诸如权限判断的事情  

             Object obj = redWineFactory.sell();  

             count ++;//同样,在调用后我们也可以执行一些额外的动作.  

             return obj ;  

         }else{  

             throw new RuntimeException();  

         }      }  

 

     protected boolean checkUser(){  

            //do something  

            return true;  

     }  

}  

public static void main(String agr[]) {  

     SellInterface sell = new RedWineProxy();  

     sell.sell();  

}  

 

原文地址:https://www.cnblogs.com/jinzhengquan/p/1934295.html