`
sundful
  • 浏览: 1249944 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
阅读更多

代理模式的一种常见的实现方案是,定义一个接口或抽象类,并派生出目标子类,和代理子类。我们要操作的是目标子类里的方法,而很多时候,我们需要为目录子类中的方法增加额外的处理,如果增加日志功能、条件判断等,这时候,就很有必要用到代理类。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->/**
 * 代理子类和目标子类的公共接口
 * 
@author rongxinhua
 *
 
*/
public interface MyInterface {
    
    
public void doOperation();

}

 

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->/**
 * 目标子类
 * 
@author rongxinhua
 *
 
*/
public class RealClass implements MyInterface {

    
/**
     * 我们要执行的目标方法
     
*/
    @Override
    
public void doOperation() {
        System.out.println(
"doOperation");
    }

}


而在没有使用代理模式的情况下,我们是这样执行目标方法的:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->        RealClass realObj = new RealClass();
        realObj.doOperation();    
//调用目标方法

打印时输出:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->doOperation



而我们要加入额外的处理的话,就可以使用代理类了:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->/**
 * 代理子类
 * 
@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");
    }

}


有了代理类,我们可以这样执行目标方法:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->        ProxyClass proxyObj = new ProxyClass(new RealClass());
        proxyObj.doOperation();    
//通过代理对象调用doOperation方法


打印时输出:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->doBefore
doOperation
doAfter


本文只是代理模式的在Java中的简单使用,而代理模式与Java反射机制的整合,为Java组件开发增加了强大的生命力.

分享到:
评论

相关推荐

    Java 静态代理模式

    1. **定义接口**:首先定义一个公共接口,接口中声明了目标对象需要实现的方法。 2. **实现目标类**:创建一个实现了接口的目标类,该类完成实际业务逻辑。 3. **创建代理类**:创建一个代理类,同样实现接口,代理...

    java模式设计--代理模式

    抽象主题角色定义了公共接口,真实主题角色实现了这些接口的实际业务逻辑,而代理主题角色则实现相同接口,并持有真实主题的引用,用于在调用真实主题之前或之后执行额外的操作。 动态代理则是Java在JDK 1.3之后...

    从房屋买卖看 java proxy 模式

    总的来说,Java 代理模式是通过代理类来增强或扩展目标类功能的一种设计模式,尤其适用于需要在调用前后添加额外逻辑的场景。通过深入理解代理模式和其在房屋买卖场景中的应用,我们可以更好地掌握这一重要的设计...

    java模式设计-代理模式之动态代理.ppt

    在Java中,动态代理是代理模式的一种实现方式,它允许我们在运行时创建代理对象,这种方式比静态代理更加灵活。动态代理在JDK 1.3及以后的版本中得到了支持,主要涉及到三个核心类:`Proxy`、`InvocationHandler`和`...

    java与模式(附源码)

    工厂模式则通过一个公共接口创建对象,使得代码更易于扩展和维护。观察者模式(Observer)让多个对象能够监听并响应某个对象的状态变化,这是事件驱动编程的基础。 "Java与模式"资料可能涵盖了23种GOF(GoF,Gang ...

    基本设计模式的Java实现

    1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,通过一个公共接口来生产不同类型的实例,而不是直接创建它们。在Java中,你可以定义一个接口或抽象类作为工厂接口,然后为每种...

    Android设计模式之代理模式(Proxy Pattern)

    Java中的`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口可以实现动态代理。动态代理在Android中常用于实现事件监听、AOP(面向切面编程)等场景。 **Android中的应用** 1. **数据加载**...

    23种设计模式的java实现

    Java中,可以通过定义访问者接口和元素接口实现。 16. **备忘录模式**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。Java中的`Serializable`接口可用于实现对象的序列化,达到...

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

    静态代理模式的核心思想是通过代理类来代理原始对象(也称为真实对象或服务对象),代理类通常与原始对象实现相同的接口,以便在客户端代码中可以透明地调用。代理类可以在调用真实对象的方法前后添加额外的操作,...

    深入浅出之Java设计模式

    动态代理是Java特有的,通过java.lang.reflect包下的Proxy类和InvocationHandler接口实现,可以在运行时动态生成代理对象。 策略模式是一种行为型模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相...

    java 静态代理和动态代理学习实例源码

    1. **定义接口**:首先,我们需要定义一个公共接口,该接口描述了真实对象和代理对象需要共同实现的行为。 ```java public interface Service { void execute(); } ``` 2. **创建真实对象**:接着,创建一个实现了...

    JAVA设计模式(十三种)

    - 工厂模式(Factory):工厂模式是一种最基础的创建型模式,它提供了一种创建对象的最佳方式,通过一个公共接口来封装一系列的对象创建过程,使客户端无需关心对象的创建细节。 - 原型模式(Prototype):原型...

    java代理实例可供参考

    在这个“java代理实例”中,我们将会深入探讨Java动态代理(Dynamic Proxy)以及静态代理(Static Proxy)的概念,这两种方法都是实现代理模式的关键。 一、Java动态代理 动态代理是Java内置的机制,主要依赖于`...

    Java中的动态代理模式.doc

    1. **定义接口**:定义一个公共接口,所有参与代理的类都必须实现这个接口。 2. **实现接口**:创建实现该接口的具体类。 3. **实现InvocationHandler**:创建一个实现了`InvocationHandler`接口的类,并重写`invoke...

    代理模式及动态代理资料和源代码

    代理模式是一种常用的设计模式,它在软件开发中起到了中介或者代表的作用,允许我们通过一个对象来控制对另一个对象的访问。在Java和Spring框架中,动态代理更是扮演着重要角色,尤其是在实现面向切面编程(AOP)时...

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

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

    设计模式-Java语言中的应用

    例如,Java的枚举类型可以方便地实现单例模式,而动态代理则可以简化代理模式的实现。 通过阅读《设计模式-Java语言中的应用》,读者不仅可以掌握设计模式的基本概念和原理,还能学习到如何在实际项目中选择合适的...

    代理模式详解

    代理模式通过创建一个对象来控制对另一个对象的访问,它属于结构型设计模式之一。 #### 二、代理模式分类 代理模式主要分为两大类:静态代理和动态代理。 1. **静态代理**: - **定义**:静态代理由程序员创建或...

Global site tag (gtag.js) - Google Analytics