`
wangqiang6028
  • 浏览: 88300 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Java 高新技术之静态代理

阅读更多

 

 

 

静态代理类:    

 

由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。不使用其他Java类,做到动态的调用接口的不同实现。

 

静态代理的优缺点
优点:不需要其他的类,实现简单;
缺点:需要更改源代码实现
 

 

如下, ProxySubject 类是代理类,RealSubject 类是委托类,这两个类都实现了ISubject 接口。其中RealSubject 类是ISubject 接口的真正实现者,而ProxySubject 类是通过调用RealSubject 类的相关方法来提供特定服务的。RealSubject 类的request()方法会调用被代理的RealSubject 对象的request()方法,并且在方法调用前后都会执行一些简单的打印操作。

由此可见,代理类可以为委托类预处理消息、把消息转发给委托类和事后处理消息等。

 

1、ISubject.java

package proxy;
/**
 * @author Chu
 * @version 创建时间:2013-06-13 上午08:30:12
 */
public interface ISubject {
    public void request();
}

 

 2、RealSubject.java 

package proxy;
/**
 * @author Chu
 * @version 创建时间:2013-06-13 上午08:31:32
 */
public class RealSubject implements ISubject {

	@Override
	public void request() {
		// TODO Auto-generated method stub
		System.out.println("realSubject requesting");
	}
}

 

3、ProxySubject.java

package proxy;
/**
 * @author Chu
 * @version 创建时间:2013-06-13 上午08:33:08
 */
public class ProxySubject implements ISubject {
	private RealSubject realSubject;
	
    public ProxySubject() {
        realSubject = new RealSubject();
    }

	@Override
	public void request() {
		// TODO Auto-generated method stub
		System.out.println("do something before");
        realSubject.request();
        System.out.println("do something after");
	}
}

 

4、TestISubject.java

package proxy;
/**
 * @author Chu
 * @version 创建时间:2013-06-13 上午08:41:32
 */
public class TestISubject {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ISubject proxySubject = new ProxySubject();
        proxySubject.request();
	}
}

 

【运行结果】如下:

do something before
realSubject requesting...
do something after

 

 

 观察代码可以发现每一个代理类只能为一个接口服务,这样一来程序开发中必然会产生过多的代理,而且,所有的代理操作除了调用的方法不一样之外,其他的操作都一样,则此时肯定是重复代码。解决这一问题最好的做法是可以通过一个代理类完成全部的代理功能,那么此时就必须使用动态代理完成。动态代理将在下一篇日志中做详细介绍。

 

 

分享到:
评论

相关推荐

    Java 静态代理模式

    Java静态代理模式是一种设计模式,它允许我们为一个对象提供一个代理,以便增强或扩展其功能,同时不改变原有对象的代码。在Java中,静态代理是通过在代理类中显式实现目标接口来实现的。下面将详细介绍静态代理模式...

    张孝祥Java高新技术源代码.rar

    【标题】"张孝祥Java高新技术源代码.rar"是一个压缩包文件,主要包含了Java高级技术相关的源代码。张孝祥,作为一个知名的Java教育专家,他的教程通常深入浅出,覆盖了Java编程的诸多核心和进阶领域。这个压缩包可能...

    java设计模式【之】静态代理【源码】【场景:帮爸爸买菜】.rar

    java设计模式【之】静态代理【源码】【场景:帮爸爸买菜】.rar * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法调用 * ...

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

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

    java 静态页面开发

    Java 静态页面开发是Web开发中的一个重要环节,它主要涉及到HTML、CSS和JavaScript等前端技术,但这里我们讨论的是在Java环境下如何处理静态页面。在Java Web应用中,静态页面通常是指不依赖服务器动态生成内容的...

    Spring模拟aop静态代理案例

    在Java编程领域,Spring框架是应用最广泛的IoC(Inversion of Control)和DI(Dependency Injection)容器之一,同时也提供了强大的面向切面编程(AOP)功能。本案例"Spring模拟aop静态代理案例"旨在帮助开发者深入...

    代理模式_静态代理.zip

    设计模式之代理模式_静态代理的一个java实现的demo。主类在Client中。仅代码实现,可供初学者参考使用

    Java的静态代理深入理解.md

    静态代理代理模式,顾名思义就是提供一个代理类,可以访问原对象并且替原对象进行一些操作。 优点:使用代理模式可以在保证不修改原有类的同时(即满足对扩展开放,对修改关闭的原则),对原有类增加一些功能实现。

    静态代理和动态代理

    在Java编程中,代理模式是一种常见的设计模式,它允许我们为一个对象提供一个代理以控制对这个对象的访问。代理模式通常用于增加额外的功能,如日志、事务管理或者权限控制,而不会改变原始对象的接口。根据实现方式...

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

    随着Java等语言的发展,动态代理(如Java的`java.lang.reflect.Proxy`)和C#的`System.Reflection.Emit`等技术,可以更灵活地创建代理对象,克服了静态代理的部分局限性。 总之,静态代理模式提供了一种在不修改...

    52.java二维数组静态初始化.zip

    52.java二维数组静态初始化.zip52.java二维数组静态初始化.zip52.java二维数组静态初始化.zip52.java二维数组静态初始化.zip52.java二维数组静态初始化.zip52.java二维数组静态初始化.zip52.java二维数组静态初始化....

    Java代理模式模板代码,包含动态代理与静态代理

    总结,Java代理模式提供了两种实现方式,静态代理适用于代理类数量较少且不需要频繁改动的情况,而动态代理则更加灵活,适用于代理类数量多或者需要动态改变代理行为的场景。了解并熟练运用这两种代理模式,可以极大...

    java 设计模式之代理模式(Proxy Pattern)实现代码及设计详解:动态代理模式、静态代理模式

    Java设计模式是软件开发中的重要概念,它提供了一套通用的解决方案模板,使得代码更加可复用、可扩展。在这些模式中,代理模式(Proxy Pattern)是...对于Java开发者来说,掌握设计模式是提升专业技能的关键步骤之一。

    java笔记静态成员

    "java笔记静态成员" java语言中静态成员是指属于类的成员,而不是属于实例的成员。静态成员可以被所有实例共享,在程序中只有一份拷贝。静态成员包括静态变量、静态方法和静态初始化块。 1、静态变量 静态变量是...

    张孝祥 Java 基础加强 高新技术

    张孝祥 Java_基础加强 高新技术 全部内容 共67页面

    Java面向对象之静态.doc

    Java面向对象之静态.doc

    java静态文件处理

    4. **使用Nginx或Apache反向代理**:另一种常见策略是将静态文件托管在一个高性能的Web服务器(如Nginx或Apache)上,然后通过Java应用服务器(如Tomcat)反向代理请求。这样,静态文件请求可以被高效地处理,而Java...

    动态代理及静态代理及ssh整合

    动态代理和静态代理是代理模式的两种主要实现方式,它们在Java编程中尤为常见。 首先,让我们从静态代理开始。静态代理是手动创建的代理类,它通常与被代理类位于同一个包下,并且实现相同的接口。在这个过程中,...

    Spring AOP的静态代理和动态代理,转移到调用处理器一个集中的方法中处理.docx

    在Java中,我们可以使用静态代理和动态代理来实现这一目的。 **静态代理** 静态代理是在编译时就确定了代理类的结构,代理类的源代码是程序员手动编写或者由特定工具自动生成的。代理类需要实现与目标类相同的接口...

    Java中的Static块与静态方法

    在Java编程语言中,`static`关键字扮演着至关重要的角色,它被用于声明类成员(如变量、方法)为静态的。静态成员不依赖于任何特定的对象实例,而是与类本身绑定,这意味着无论该类有多少个实例,静态成员只会有一份...

Global site tag (gtag.js) - Google Analytics