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
时间: 2024-08-05 07:16:23

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

java 动态代理模式

一.相关类及其方法:java.lang.reflect.Proxy,Proxy 提供用于创建动态代理类和实例的静态方法.newProxyInstance()返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序(详见api文档) java.lang.reflect.InvocationHandler,InvocationHandler 是代理实例的调用处理程序 实现的接口.invoke()在代理实例上处理方法调用并返回结果.在与方法关联的代理实例上调用方法时,将在调用处理程序

Java设计模式-代理模式之动态代理(附源码分析)

Java设计模式-代理模式之动态代理(附源码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的区别就是:动态代理是在运行时刻动态的创建出代理类及其对象.上篇中的静态代理是在编译的时候就确定了代理类具体类型,如果有多个类需要代理,那么就得创建多个.还有一点,如果Subject中新增了一个方法,那么对应的实现接口的类中也要相应的实习该方法,不符合设计模式原则. 动态代理的做法:在运行时刻,可以动态创建出一个实现了多个接口的代理类.每个代理类的对象都会关联一个表示内部处理

Java设计模式-代理模式之动态代理(附源代码分析)

Java设计模式-代理模式之动态代理(附源代码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的差别就是:动态代理是在执行时刻动态的创建出代理类及其对象. 上篇中的静态代理是在编译的时候就确定了代理类详细类型.假设有多个类须要代理.那么就得创建多个. 另一点,假设Subject中新增了一个方法,那么相应的实现接口的类中也要相应的实现这些方法. 动态代理的做法:在执行时刻.能够动态创建出一个实现了多个接口的代理类.每一个代理类的对象都会关联一个表示内部处理逻辑的Inv

Java设计模式-代理模式之静态代理

Java设计模式-代理模式之静态代理 概念 为另一个对象提供一个替身或占位符以提供对这个对象的访问,使用代理模式创建代表对象,让代表对象控制某对象的访问,被代理对象可以是远程的对象.创建开销大的对象或需要安全控制的对象 远程代理控制访问远程对象 虚拟代理控制访问创建开销大的资源 保护代理基于权限控制对资源的访问 看如下的类图: 仔细看上面的类图,首先是Subject它为RealSubject和Proxy提供了接口,通过实现同一个接口,Proxy在RealSubject出现的地方取代它,这点和适配

一起学java设计模式--代理模式(结构型模式)

代理模式 应用软件所提供的桌面快捷方式是快速启动应用程序的代理,桌面快捷方式一般使用一张小图片来表示(Picture),通过调用快捷方式的run()方法将调用应用软件(Application)的run()方法.使用代理模式模拟该过程,绘制类图并编程实现. package ProxyPattern; interface Software { void run(); } class Application implements Software { public void run() { Syste

Java设计模式——代理模式

前言: 上一篇说到了策略模式.单类图上来说,它和本篇要说的代理模式还真是有些像似.都需要一个公共的接口,还有一些实现类.代理类(包装类)封装了一个接口对象,提供客户端调用.这些都很类似.不过,有一个细节需要我们注意一下,那就是这里的代理类也需要去继承这里的公共接口.而在策略模式中,包装类则不需要这么做. 概述: 代理模式就是定义一个原对象的代理对象,来帮助原对象和系统之外的业务作沟通.也就是说,如果我们不能直接或是不愿直接去使用原对象,那么我们就可以使用创建一个原对象的代理来进行操作. 本文链接

Java动态代理模式

1.如何实现静态代理模式? 能够想到的方式起码有两种继承和聚合. 创建一个接口 package com.jyd.proxy; /** * 定义一个可以工作的接口,定义一系列操作方法 * @author hadoop * */ public interface Workable { void renting(); } 创建一个类继承这个接口 package com.jyd.proxy; import java.util.Random; /** * 定义一个中介人来实现可以工作的接口 * @auth

谈谈JAVA的代理模式认识 一

一.中介隔离作用 代理模式,第一次接触它,是在学习.Net的时候看的一本书,叫做<大话设计模式>,至今已快三年了.相信看过这本书的同学们,都记得书中的代理模式,就是为他人做嫁衣裳的故事.好,我们回归代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用, 其特征是代理类与委托类有同样的接口,.代理模式是常用的java设计模式. 表现形式如下: 以上一张图就是当初对代理模式的认识.

谈谈Java的代理模式及动态代理

Java的动态代理在实践中有着广泛的使用场景,比如最场景的Spring AOP.Java注解的获取.日志.用户鉴权等.本篇文章带大家了解一下代理模式.静态代理以及基于JDK原生动态代理. 代理模式无论学习静态代理或动态代理,我们都要先了解一下代理模式. 先看百度百科的定义: 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 直接看定义可能有些难以理解,我们就以生活中具体的实例