java技术之静态代理

转自:http://layznet.iteye.com/blog/1182924?from=timeline&isappinstalled=1

由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。

清单1:代理接口
Java代码   收藏代码
  1. /**  
  2.  * 代理接口。处理给定名字的任务。 
  3.  */  
  4. public interface Subject {  
  5.   /** 
  6.    * 执行给定名字的任务。 
  7.     * @param taskName 任务名 
  8.    */  
  9.    public void dealTask(String taskName);   
  10. }  

清单2:委托类,具体处理业务。
Java代码   收藏代码
  1. /** 
  2.  * 真正执行任务的类,实现了代理接口。 
  3.  */  
  4. public class RealSubject implements Subject {  
  5.   
  6.  /** 
  7.   * 执行给定名字的任务。这里打印出任务名,并休眠500ms模拟任务执行了很长时间 
  8.   * @param taskName  
  9.   */  
  10.    @Override  
  11.    public void dealTask(String taskName) {  
  12.       System.out.println("正在执行任务:"+taskName);  
  13.       try {  
  14.          Thread.sleep(500);  
  15.       } catch (InterruptedException e) {  
  16.          e.printStackTrace();  
  17.       }  
  18.    }  
  19. }  

清单3:静态代理类
Java代码   收藏代码
  1. /** 
  2.  * 代理类,实现了代理接口。 
  3.  */  
  4. public class ProxySubject implements Subject {  
  5.  //代理类持有一个委托类的对象引用  
  6.  private Subject delegate;  
  7.    
  8.  public ProxySubject(Subject delegate) {  
  9.   this.delegate = delegate;  
  10.  }  
  11.   
  12.  /** 
  13.   * 将请求分派给委托类执行,记录任务执行前后的时间,时间差即为任务的处理时间 
  14.   *  
  15.   * @param taskName 
  16.   */  
  17.  @Override  
  18.  public void dealTask(String taskName) {  
  19.   long stime = System.currentTimeMillis();   
  20.   //将请求分派给委托类处理  
  21.   delegate.dealTask(taskName);  
  22.   long ftime = System.currentTimeMillis();   
  23.   System.out.println("执行任务耗时"+(ftime - stime)+"毫秒");  
  24.     
  25.  }  
  26. }  

清单4:生成静态代理类工厂
Java代码   收藏代码
  1. public class SubjectStaticFactory {  
  2.  //客户类调用此工厂方法获得代理对象。  
  3.  //对客户类来说,其并不知道返回的是代理类对象还是委托类对象。  
  4.  public static Subject getInstance(){   
  5.   return new ProxySubject(new RealSubject());  
  6.  }  
  7. }  

清单5:客户类
Java代码   收藏代码
  1. public class Client1 {  
  2.   
  3.  public static void main(String[] args) {  
  4.   Subject proxy = SubjectStaticFactory.getInstance();  
  5.   proxy.dealTask("DBQueryTask");  
  6.  }   
  7.   
  8. }  


静态代理类优缺点
优点:业务类只需要关注业务逻辑本身,保证了业务类的重用性。这是代理的共有优点。
缺点:
1)代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。
2)如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。
基于SSM框架的智能家政保洁预约系统,是一个旨在提高家政保洁服务预约效率和管理水平的平台。该系统通过集成现代信息技术,为家政公司、家政服务人员和消费者提供了一个便捷的在线预约和管理系统。 系统的主要功能包括: 1. **用户管理**:允许消费者注册、登录,并管理他们的个人资料和预约历史。 2. **家政人员管理**:家政服务人员可以注册并更新自己的个人信息、服务类别和服务时间。 3. **服务预约**:消费者可以浏览不同的家政服务选项,选择合适的服务人员,并在线预约服务。 4. **订单管理**:系统支持订单的创建、跟踪和管理,包括订单的确认、完成和评价。 5. **评价系统**:消费者可以在家政服务完成后对服务进行评价,帮助提高服务质量和透明度。 6. **后台管理**:管理员可以管理用户、家政人员信息、服务类别、预约订单以及处理用户反馈。 系统采用Java语言开发,使用MySQL数据库进行数据存储,通过B/S架构实现用户与服务的在线交互。系统设计考虑了不同用户角色的需求,包括管理员、家政服务人员和普通用户,每个角色都有相应的权限和功能。此外,系统还采用了软件组件化、精化体系结构、分离逻辑和数据等方法,以便于未来的系统升级和维护。 智能家政保洁预约系统通过提供一个集中的平台,不仅方便了消费者的预约和管理,也为家政服务人员提供了一个展示和推广自己服务的机会。同时,系统的后台管理功能为家政公司提供了强大的数据支持和决策辅助,有助于提高服务质量和管理效率。该系统的设计与实现,标志着家政保洁服务向现代化和网络化的转型,为管理决策和控制提供保障,是行业发展中的重要里程碑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值