`
longgangbai
  • 浏览: 7339817 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于代理模式(二)

阅读更多

     最近项目进行实施中一切很忙,没有时间上网,今天上网看看,玩玩,同时发表一篇文章的。这里说说代理模式呗。

客户端:

代码:

 

Java代码

import java.lang.reflect.InvocationHandler;  

import java.lang.reflect.Proxy;  

import java.lang.reflect.Constructor;  

import java.lang.reflect.Method;  

public class Client{   

   static public void main(String[] args) throws Throwable{  

   RealSubject rs = new RealSubject(); //在这里指定被代理类  

   InvocationHandler ds = new DynamicSubject(rs); //初始化代理类  

   Class cls = rs.getClass();  

   //以下是分解步骤  

   /* 

   Class c = Proxy.getProxyClass(cls.getClassLoader(),cls.getInterfaces()); 

   Constructor ct=c.getConstructor(new Class[]{InvocationHandler.class}); 

   Subject subject =(Subject) ct.newInstance(new Object[]{ds}); 

*/ 

 

//以下是一次性生成  

 

   Subject subject = (Subject) Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),ds);  

   subject.request();  

} 

 

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Proxy;

import java.lang.reflect.Constructor;

import java.lang.reflect.Method;

public class Client{

   static public void main(String[] args) throws Throwable{

   RealSubject rs = new RealSubject(); //在这里指定被代理类

   InvocationHandler ds = new DynamicSubject(rs); //初始化代理类

   Class cls = rs.getClass();

   //以下是分解步骤

   /*

   Class c = Proxy.getProxyClass(cls.getClassLoader(),cls.getInterfaces());

   Constructor ct=c.getConstructor(new Class[]{InvocationHandler.class});

   Subject subject =(Subject) ct.newInstance(new Object[]{ds});

*/

 

//以下是一次性生成

 

   Subject subject = (Subject) Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),ds);

   subject.request();

}

 

 

通过这种方式,被代理的对象(RealSubject)可以在运行时动态改变,需要控制的接口(Subject接口)可以在运行时改变,控制的方式(DynamicSubject)也可以动态改变,从而实现了非常灵活的动态代理关系。

 

3.代理模式使用原因和应用方面

 

1)授权机制 不同级别的用户对同一对象拥有不同的访问权利,Jive论坛系统中,就使用Proxy进行授权机制控制,访问论坛有两种人:注册用户和游客(未注册用户),Jive中就通过类似ForumProxy这样的代理来控制这两种用户对论坛的访问权限.

 

2)某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动.

      举例两个具体情况:

      如果那个对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片Proxy来代替真正的图片.

    

      如果那个对象在Internet的某个远端服务器上,直接操作这个对象因为网络速度原因可能比较慢,那我们可以先用Proxy来代替那个对象.

    

      总之原则是,对于开销很大的对象,只有在使用它时才创建,这个原则可以为我们节省很多宝贵的Java内存. 所以,有些人认为Java耗费资源内存,我以为这和程序编制思路也有一定的关系.

 

3)现实中,Proxy应用范围很广,现在流行的分布计算方式RMICorba等都是Proxy模式的应用

分享到:
评论

相关推荐

    JAVA设计模式(代理模式)

    **Java设计模式——代理模式详解** 代理模式是软件设计模式中的一个重要组成部分,它在Java编程中扮演着举足轻重的角色。代理模式的核心思想是为一个对象提供一个替身,这个替身即代理对象,代理对象可以控制对原...

    Java代理模式Java动态代理

    ### Java代理模式与Java动态代理详解 #### 一、代理模式概述 代理模式是一种软件设计模式,它在客户端和目标对象之间提供了一种间接层。这种模式的主要目的是控制客户端对目标对象的访问,并且可以在不修改原有...

    cas代理模式代码示例

    在IT行业中,代理模式是一种常见的设计模式,它允许我们在不修改原有对象的基础上,为对象添加新的功能或控制访问。在本示例中,我们将重点讨论如何在Java环境下使用代理模式来实现代理逻辑,特别是在CAS(Central ...

    动态代理设计模式 日志和源码

    二是使用JDK动态代理。另一种常见的方式是使用CGLIB库,它是在字节码级别创建代理对象,适用于无法实现接口的目标类。 **JDK动态代理**: JDK动态代理基于接口实现。首先,我们需要定义一个或多个接口,然后创建一...

    Java设计模式之代理模式(结构)

    #### 二、虚拟代理模式概述 虚拟代理模式是一种特殊的代理模式,主要目的是延迟昂贵对象的创建时间,以减少对系统资源的消耗。该模式适用于那些创建成本较高或者处理过程较为复杂的情况,例如大型图像处理、大数据量...

    Java Spring代理模式AOP-IOC分析

    Java Spring代理模式AOP-IOC分析 一、代理模式概述 在软件设计中,代理模式是一种常用的设计模式。它可以在不修改原始代码的情况下,扩展或修改原始对象的行为。代理模式可以分为静态代理和动态代理两种。静态代理...

    java代理模式

    Java代理模式是一种设计模式,它在面向对象编程中扮演着重要的角色,主要目的是为了在不修改原有对象的基础上,为对象添加额外的功能或者控制对对象的访问。代理模式的核心思想是通过代理类来间接调用目标类的方法,...

    代理模式详解

    #### 二、代理模式分类 代理模式主要分为两大类:静态代理和动态代理。 1. **静态代理**: - **定义**:静态代理由程序员创建或特定工具自动生成源代码,随后编译产生的代理类。这种代理类是提前定义好的,也就是...

    优秀的设计模式示例-动态代理模式

    以上就是关于动态代理模式的基本介绍,它在软件开发中起着重要作用,特别是在需要透明地添加额外功能或隔离复杂组件时。通过理解并熟练掌握动态代理,开发者可以更灵活地构建系统,提高代码的可维护性和可扩展性。

    java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂 第二部分

    本篇将深入探讨标题中提及的几种设计模式:Model-View-Controller(MVC)模式、单例模式、代理模式以及工厂模式,尤其是简单工厂模式。 **1. Model-View-Controller (MVC) 模式** MVC模式是一种架构模式,它将应用...

    适配器模式,装饰模式和代理模式1

    适配器模式、装饰模式和代理模式 本文将详细介绍适配器模式、装饰模式和代理模式的概念、特点和应用场景,并通过实际的例子来阐述这三种模式的差异和相同点。 一、适配器模式 适配器模式是一种结构型设计模式,它...

    第十二讲:代理模式

    在IT行业中,代理模式是一种设计模式,它在对象交互中起到中介的作用,允许我们通过代理对象来间接调用目标对象,从而实现某些特殊的目的。在本讲中,我们将深入探讨代理模式的核心概念、应用场景以及其实现方式。 ...

    涉及模式之代理模式

    #### 二、代理模式的应用场景 代理模式的应用非常广泛,主要可以解决以下几种问题: 1. **远程代理**:当目标对象位于不同的地址空间时,可以通过代理模式进行封装,使得客户端感觉是在本地操作一样。 2. **虚拟...

    Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理)

    Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理) Java 动态代理是 Java 编程语言中的一种强大工具,广泛应用于 Spring AOP、Hibernate 数据查询、测试框架的后端 mock、RPC 远程调用、Java 注解...

    Spring代理模式解析

    Spring框架中的代理模式是其核心特性之一,它在AOP(面向切面编程)中扮演着重要角色。本文将深入探讨Spring代理模式的工作原理,并通过实际示例来帮助理解。 一、Spring代理模式概述 代理模式是一种设计模式,它...

    java代理模式和动态代理

    #### 二、代理模式 ##### 1. 代理模式定义 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。这种方式可以在客户端和目标对象之间建立一个间接层,通过该层可以添加额外的功能,如权限检查...

    二十二种设计模式.pdf

    十一、代理模式 十二、命令模式 十三、责任链模式 十四、解释器模式 十五、迭代器模式 十六、备忘录模式 十七、中介者模式 十八、状态模式 十九、观察者模式 二十、策略模式 二十一、模板方法模式 二十二、访问者...

    java Spring代理模式AOP-IOC结合

    Java Spring 代理模式 AOP-IOC 结合 从给定的文件信息中,我们可以总结出以下知识点: 一、为什么需要代理模式 在软件开发中,我们经常会遇到一些非功能性需求,如日志记录、身份验证、性能监控等,这些需求会...

Global site tag (gtag.js) - Google Analytics