首页 > 代码库 > JAVA设计模式(3)----代理模式

JAVA设计模式(3)----代理模式

 1.  什么是代理模式?Proxy Pattern

     代理模式定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

     通俗的讲,代理模式就是我很忙没空理你,你要想找我可以先找我的代理人,代理人和被代理人继承同一个接口。代理人虽然不能干活,但是被代理的人可以干活。

    这个例子中有水浒传中的这么几个人:名垂青史的潘金莲,王婆,西门大官人。西门庆想要找潘金莲,需要找王婆做代理。首先定义一个接口:KindWomen,潘金莲和王婆是同一种女人,接口里面有两个功能:

     

package Proxy;

public interface KindWomen {
     public void PaoMeiYan();
     
     public void HappyWithMan();
}

   定义潘金莲类,实现KindWomen接口

   

package Proxy;

public class PanJinLian implements KindWomen {
        public void PaoMeiYan(){
              System.out.println("潘金莲抛媚眼!");
        }
        
        public void HappyWithMan(){
            System.out.println("潘金莲happy with man……");
        }
}

定义王婆类,同样实现KindWomen接口

package Proxy;

public class WangPo implements KindWomen{
   private KindWomen kindwomen;
   
   public WangPo(){//默认为潘金莲的代理
          
         this.kindwomen=new PanJinLian();
   }
   
   public WangPo(KindWomen kindwomen){
        this.kindwomen=kindwomen;
   }
   
   public void HappyWithMan(){
       this.kindwomen.HappyWithMan();
   }
   
   
   public void PaoMeiYan(){
       this.kindwomen.PaoMeiYan();
   }
      
   
}

西门庆类:

 

package Proxy;

public class XiMenQing {
   public static void main(String[] args) {
       
         WangPo wangPo=new WangPo();
         
         wangPo.HappyWithMan();
         wangPo.PaoMeiYan();
             
         
  }
}

结果:

 

再增加和潘金莲一类的女人贾氏

package Proxy;

public class JiaShi  implements KindWomen {
   
      public void HappyWithMan(){
          System.out.println("贾氏happy with man……");
      }
      
      public void  PaoMeiYan(){
            System.out.println("贾氏抛媚眼……");
      }
}

西门勾引贾

package Proxy;

public class XiMenQing {
   public static void main(String[] args) {
       
         WangPo wangPo=new WangPo();
         
         wangPo.HappyWithMan();
         wangPo.PaoMeiYan();
         
         
        JiaShi jiashi=new JiaShi();
         wangPo=new WangPo(jiashi);
         wangPo.HappyWithMan();
         wangPo.PaoMeiYan();
  }
}