J2EE (九) 静态代理和动态代理--间接“美”

 

J2EE (九) 静态代理和动态代理--间接“美”

分类: J2EE   489人阅读  评论(5)  收藏  举报

        生活中有很多例子是间接来控制和访问的,比如你找一个人不自己亲自去,而是让别人代替去做这就是最简单的代理模式,是一种间接通信的例子,对象间的间接通信也同样是面向对象设计中的一条重要的“审美观”。间接通信可以让对象间耦合性降低,以及易于复用的架构设计。

        间接控制对象的交互是一个重要的编程思想,有很多的模式都体现了这种思想,比如装饰模式、适配器模式、代理模式,都是通过间接的方式实现某一目的。

        这里主要介绍一下代理模式,无论是在现实生活中还是计算机技术中用到代理的地方非常多,主要分为静态代理和动态代理。

        我们都做过机房收费系统就那这个系统来举例子,这个系统中有对用户操作的用户接口IUser,以及实现了这个接口的类UserImp,Java代码如下。

[java]  view plain copy print ?
  1. <span style="font-size:18px;">/** 
  2.  * 用户表接口 
  3.  * @author LLS 
  4.  * 
  5.  */  
  6. public interface IUser  
  7. {  
  8.       //添加用户  
  9.       void addUser();  
  10.       //删除用户  
  11.       void delUser();  
  12. }</span>  


        用户实现类

[java]  view plain copy print ?
  1. <span style="font-size:18px;">/** 
  2.  * 实现用户接口类 
  3.  * @author LLS 
  4.  * 
  5.  */  
  6. public class UserImpl implements IUser   
  7. {  
  8.   
  9.     public void addUser() {  
  10.         // 添加用户代码  
  11.     }  
  12.       
  13.     public void delUser() {  
  14.         // 删除用户代码  
  15.     }  
  16. }</span>  

        

        在这个例子中,我们可能需要在添加用户或者删除用户的时候进行权限检查,符合权限的才能执行相关动作,否则不能执行,那么该如何修改代码才能更加贴切,而且在实际的编写过程中,虽然我们需要权限模块,但有时候为了更好地快速测试,我们常常希望暂时关闭权限模块,如何才能让这样的临时需求变得更加容易处理呢?我们现在使用代理模式来完成这样的任务,现在继续编写一个类叫 UserImplProxy.

 

    用户代理类

[java]  view plain copy print ?
  1. <span style="font-size:18px;">/** 
  2.  * 用户实现类的代理 
  3.  * @author LLS 
  4.  * 
  5.  */  
  6. public class UserImplProxy implements IUser   
  7. {  
  8.     //对用户实现类的引用  
  9.     private UserImpl userImpl;  
  10.     //添加用户  
  11.     public void addUser()  
  12.     {  
  13.         //调用添加之前进行权限验证  
  14.         preIdentify();  
  15.   
  16.         if( userImpl == null )  
  17.         {  
  18.             userImpl = new UserImpl();  
  19.         }  
  20.         //调用源对象的添加  
  21.         userImpl.addUser();  
  22.         //添加完后,执行操作  
  23.         postIdentify();  
  24.     }  
  25.       
  26.     public void delUser()  
  27.     {  
  28.         preIdentify();  
  29.   
  30.         if( userImpl == null )  
  31.         {  
  32.             userImpl = new UserImpl();  
  33.         }  
  34.   
  35.         userImpl.addUser();  
  36.   
  37.         postIdentify();  
  38.     }  
  39.     //验证方法  
  40.     private void preIdentify()  
  41.     {  
  42.         System.out.println("添加之前验证代码!");  
  43.     }  
  44.     //验证  
  45.     private void postIdentify()  
  46.     {  
  47.         System.out.println("添加后执行操作");  
  48.     }  
  49. }</span>  

          这样就可以很容易的实现权限验证功能,很灵活。

          上面是静态代理模式,如果不知道被代理对象可以使用动态代理……更新中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值