`
zhaohaolin
  • 浏览: 984249 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java代理模式(通过公共接口实现)

阅读更多
Java 的代理模式(通过公共接口实现)
代理模式的一种常见的实现方案是,定义一个接口或抽象类,并派生出目标子类,
和代理子类。我们要操作的是目标子类里的方法,而很多时候,我们需要为目标子类中的方法增加额外的处理,
如果增加日志功能、条件判断等,这时候,就很有必要用到代理类。
/**
 * 代理子类和目标子类的公共接口
 * @author rongxinhua
 *
 */
public interface MyInterface {
    
    public void doOperation();
}
/**
 * 目标子类
 * @author rongxinhua
 *
 */
public class RealClass implements MyInterface {
    /**
     * 我们要执行的目标方法
     */
    @Override
    public void doOperation() {
        System.out.println("doOperation");
    }
}
而在没有使用代理模式的情况下,我们是这样执行目标方法的:
        RealClass realObj = new RealClass();
        realObj.doOperation();    //调用目标方法
打印时输出:
doOperation
而我们要加入额外的处理的话,就可以使用代理类了:
/**
 * 代理子类
 * @author rongxinhua
 *
 */
public class ProxyClass implements MyInterface {
    private MyInterface realObj;    //目标子类对象
    
    public ProxyClass(MyInterface realObj) {
        this.realObj = realObj;
    }
    
    /**
     * 调用目标子类的方法,并在其中加入了前置处理和后置处理
     */
    @Override
    public void doOperation() {
        doBefore();
        realObj.doOperation();
        doAfter();
    }
    
    /**
     * 目标方法调用前的相关处理
     */
    private void doBefore() {
        System.out.println("doBefore");
    }
    
    /**
     * 目标方法调用后的相关处理
     */
    private void doAfter() {
        System.out.println("doAfter");
    }
}
有了代理类,我们可以这样执行目标方法:
        ProxyClass proxyObj = new ProxyClass(new RealClass());
        proxyObj.doOperation();    //通过代理对象调用doOperation方法
打印时输出:
doBefore
doOperation
doAfter
本文只是代理模式的在Java中的简单使用,而代理模式与Java反射机制的整合,
为Java组件开发增加了强大的生命力,有兴趣的朋友可看我另一个博客中的文章:
探讨代理模式与Java反射机制的应用
分享到:
评论

相关推荐

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

    * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法调用 * * 作用 * 1.保护被代理对象 * 2.增强被代理对象 * 3.完全...

    JAVA_API1.6文档(中文)

    java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供...

    java api最新7.0

    java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类和...

    Java 1.6 API 中文 New

    java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类和...

    java 面试题 总结

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    JavaAPI1.6中文chm文档 part1

    java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供...

    JAVA上百实例源码以及开源项目

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    JavaAPI中文chm文档 part2

    java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供...

    JAVA上百实例源码以及开源项目源代码

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    java jdk-api-1.6 中文 chmd

    java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供...

    [Java参考文档]

    java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供...

    [Java参考文档].JDK_API 1.6

    java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类和...

    超级有影响力霸气的Java面试题大全文档

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    JAVA SMART系统-系统框架设计与开发(源代码+论文)

    在业务层则是采用单例模式设计与Spring的IoC模式相结合,实现了公共代理类的编写,各业务逻辑接口的封装。而在持久层的设计中则是采用基于现有持久层框架的实现模式,实现了对产生Session实例的封装,对常用数据库...

    JAVA SMART系统-系统框架设计与开发程序源代码毕业论文

    在业务层则是采用单例模式设计与Spring的IoC模式相结合,实现了公共代理类的编写,各业务逻辑接口的封装。而在持久层的设计中则是采用基于现有持久层框架的实现模式,实现了对产生Session实例的封装,对常用数据库...

Global site tag (gtag.js) - Google Analytics