设计模式之---代理模式Proxy Pattern

 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道
被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被
代理的人能干活呀。
比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的:
先定义一种类型的女人(接口):

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. package com.fc.Proxy;  
  2. public interface KindWoman {  
  3.     public void makeEyesWithMan(); //抛媚眼  
  4. }  


然后定义潘金莲:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. package com.fc.Proxy;  
  2.   
  3. public class PanJinlian implements KindWoman {  
  4.   
  5.     public void makeEyesWithMan() {  
  6.         System.out.println("潘金莲在抛媚眼。。。");  
  7.   
  8.     }  
  9.   
  10. }  

再来个王婆,也就是潘金莲的代理人:

 

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. package com.fc.Proxy;  
  2.   
  3. public class WangPo implements KindWoman {  
  4. private KindWoman kindwoman;  
  5.   
  6.   
  7.     public WangPo() {  
  8.         this. kindwoman = new PanJinlian();//王婆默认是潘金莲的代理人  
  9. }  
  10.     //王婆也可以是KindWomen的其他任何一个女人的代理,只要你是这一类型  
  11.     public WangPo(KindWoman kindWomen){  
  12.      this. kindwoman = kindWomen;  
  13.      }  
  14.   
  15.     public void makeEyesWithMan() {  
  16.          this. kindwoman.makeEyesWithMan(); //王婆这么大年龄了,谁看她抛媚眼?!她代替别人抛  
  17.          }  
  18.   
  19. }  

连个女猪脚已经登场,下面到西门庆了:

 

 

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. package com.fc.Proxy;  
  2.   
  3. public class XiMenQing {  
  4.   
  5.       
  6.     public static void main(String[] args) {  
  7.         //把王婆叫出来  
  8.          WangPo wangPo = new WangPo();  
  9.          //然后西门庆就说,我要和潘金莲happy,然后王婆就安排了西门庆丢筷子的那出戏:  
  10.          wangPo.makeEyesWithMan(); //看到没,虽然表面上时王婆在做,实际上爽的是潘金莲  
  11.   
  12.     }  
  13.   
  14. }  


好了现在王婆为西门庆代理完了,说不准她还得给别人代理,假设现在又来了个潘金莲2号:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. package com.fc.Proxy;  
  2.   
  3. public class PanJinlian222 implements KindWoman {  
  4.   
  5.     public void makeEyesWithMan() {  
  6.         System.out.println("潘金莲222在抛媚眼。。。");  
  7.   
  8.     }  
  9.   
  10.   
  11. }  


然后西门庆又来找王婆帮忙勾引潘金莲2号:修改西门庆:

 

 

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. package com.fc.Proxy;  
  2.   
  3. public class XiMenQing {  
  4.   
  5.       
  6.     public static void main(String[] args) {  
  7.     /*  //把王婆叫出来 
  8.          WangPo wangPo = new WangPo(); 
  9.      
  10.          //然后西门庆就说,我要和潘金莲happy,然后王婆就安排了西门庆丢筷子的那出戏: 
  11.          wangPo.makeEyesWithMan(); //看到没,虽然表面上时王婆在做,实际上爽的是潘金莲 
  12. */    
  13.         WangPo wangPo=new WangPo(new PanJinlian222());//这个不是默认代理,要往里传个参数  
  14.         wangPo.makeEyesWithMan();  
  15.     }  
  16.   
  17. }  


说完这个故事,那额总结一下,代理模式主要使用了 Java 的多态,干活的是被代理类,代理类主要是
接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,
大家知根知底,你能做啥,我能做啥都清楚的很,同一个接口呗。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值