设计模式之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.    

 本文转自 最牛傻蛋 51CTO博客,原文链接:http://blog.51cto.com/zuiniuwang/718356,如需转载请自行联系原作者

相关文章
|
2月前
|
设计模式 Java
Java一分钟之-设计模式:装饰器模式与代理模式
【5月更文挑战第17天】本文探讨了装饰器模式和代理模式,两者都是在不改变原有对象基础上添加新功能。装饰器模式用于动态扩展对象功能,但过度使用可能导致类数量过多;代理模式用于控制对象访问,可能引入额外性能开销。文中通过 Java 代码示例展示了两种模式的实现。理解并恰当运用这些模式能提升代码的可扩展性和可维护性。
39 1
|
2月前
|
设计模式 Java 数据库连接
【重温设计模式】代理模式及其Java示例
【重温设计模式】代理模式及其Java示例
|
11天前
|
设计模式 缓存 JavaScript
js设计模式【详解】—— 代理模式
js设计模式【详解】—— 代理模式
8 0
|
14天前
|
设计模式 监控 安全
设计模式之代理模式(Java)
设计模式之代理模式(Java)
|
15天前
|
设计模式 安全 Java
Java设计模式:代理模式的静态和动态之分(八)
Java设计模式:代理模式的静态和动态之分(八)
|
16天前
|
设计模式 Java
Java设计模式之代理模式详解
Java设计模式之代理模式详解
|
17天前
|
设计模式
代理模式-大话设计模式
代理模式-大话设计模式
6 0
|
22天前
|
设计模式 编解码 网络安全
结构型设计模式之代理模式
结构型设计模式之代理模式
|
1月前
|
设计模式 架构师 安全
设计模式第五讲-装饰器模式和代理模式详解
远程代理,这种方式通常是为了隐藏目标对象存在于不同地址空间的事实,方便客户端访问。例如,用户申请某些网盘空间时,会在用户的文件系统中建立一个虚拟的硬盘,用户访问虚拟硬盘时实际访问的是网盘空间。
185 0
|
2月前
|
设计模式 安全 网络协议
【设计模式】代理模式例子解析
【设计模式】代理模式例子解析
25 2