设计模式之Proxy--静态代理(代理模式)

代理模式一遍涉及的角色有
1.抽象角色:声明真实对象和代理对象的共同接口
2.代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作
真实对象,同时代理对象提供与真实对象相同的接口以便在任何时候都能够代替真实对象。同时代理对象可以在执行真实对象操作时,附加其他操作,想当于对真实对象进行封装。
3.真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。
4.客户需要调用的是RealSubject中的request方法,现在使用ProxySubject来代理Realsubject类,同样达到了目的,同时还封装了其他方法(preRequest,afterRequest),可以处理一些其他问题。
5.另外,如果要按照上述方法使用代理模式,那么真实的角色必须是已经存在了的,并将其作为代理对象的内部属性。但是实际使用的时候i,一个真实角色必须对应一个代理角色,如果大量使用会导致类得极具膨胀;此外如果事先并不知道真实角色,那么该如何使用代理?这个问题可以通过Java的动态代理类来解决。
 

?[Copy to clipboard] Download zuiniuwang.java
 
 
   
  1. /**  
  2.  * Proxy.java  
  3.  * proxy  
  4.  *  
  5.  * Function: TODO  
  6.  *  
  7.  *   ver     date           author  
  8.  * ──────────────────────────────────  
  9.  *           2011-6-8       Leon  
  10.  *  
  11.  * Copyright (c) 2011, TNT All Rights Reserved.  
  12. */  
  13.    
  14. package proxy;  
  15. /**  
  16.  * ClassName:Proxy  
  17.  * Function: TODO ADD FUNCTION  
  18.  * Reason:   TODO ADD REASON  
  19.  *  
  20.  * @author   Leon  
  21.  * @version  
  22.  * @since    Ver 1.1  
  23.  * @Date     2011-6-8  
  24.  */  
  25.    
  26. abstract class Subject {  
  27.     public abstract void request() ;  
  28. }  
  29.    
  30. class RealSubject extends Subject{  
  31.     @Override  
  32.     public void request() {  
  33.    
  34.         // TODO Auto-generated method stub  
  35.         System.out.println("This is my real Request...");  
  36.    
  37.     }  
  38. }  
  39. public class Proxy extends Subject {  
  40.    
  41.     /** Proxy中会包含对RealSubject的引用**/  
  42.     private RealSubject realSubject ;  
  43.     @Override  
  44.     public void request() {  
  45.    
  46.         // TODO Auto-generated method stub  
  47.         //调用真实之前(optional)  
  48.         this.preRequest();  
  49.         if(realSubject==null){  
  50.             //调用真实角色  
  51.             realSubject = new RealSubject();  
  52.         }  
  53.         realSubject.request();  
  54.         //调用真实之后(optional)  
  55.         this.afterRequest();  
  56.     }  
  57.     private void preRequest(){  
  58.         System.out.println("before real request.....");  
  59.     }  
  60.     private void afterRequest(){  
  61.         System.out.println("after the real  request......");  
  62.     }  
  63.     public static void main(String...  args){  
  64.         Subject subject =  new Proxy();  
  65.         subject.request();  
  66.     }  
  67.    

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值