代理-静态代理

作者: 理查德成 | 来源:发表于2019-05-19 17:49 被阅读0次

一、静态代理实现

按照代理模式的类图:

代理模式类图

静态代理,代理类在编译时生成;即,需要编码代理类。

从实现上来看,静态代理类不具备真实主题类处理真正请求的能力,因此需要将请求交给真实主题对象处理;为了获取真是主题类的能力,代理类可以继承真实主题类,或者组合真实主题对象。

设计原则

多用组合,少用继承

即使通过继承可以满足需求,但是由于继承不如组合灵活,采用组合会更好一些。

由此,静态代理的实现步骤一般为(主题接口Subject, 真实主题对象类RealSubject一般都是存在的):

  1. 创建代理类,实现主题接口Subject;
  2. 代理类持有真实主题对象类的引用;
  3. 代理类实现主题接口Subject的方法,并委托给引用的真实主题对象类处理。

二、实例:计算耗时操作

要为一项耗时操作计时,最直观的做法是在耗时操作前后打印当前时间,但是这样的代码不利于维护。使用代理模式,从设计上

  1. 首先需要为计时操作创建接口,即主题接口
  2. 实现主题接口,即真实主题类提供真正的耗时操作
  3. 代理类组合真是主题类实例,实现主题接口
  4. 客户端使用代理类完成耗时任务请求

实现类图如下

静态代理实现

完整代码见附录。

refer to

[1] java静态代理和动态代理

附录

静态代理实现

// Subject主题接口
public interface Subject {
    void doTask();
}
// 真是主题类,真正处理请求的类
public class RealSubject implements Subject {

    @Override
    public void doTask() {
        try {
            Thread.sleep(10000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
// 拦截对真实主题对象访问,代理类
public class Proxy implements Subject {

    private Subject realSubject;

    public Proxy(Subject realSubject) {
        this.realSubject = realSubject;
    }

    @Override
    public void doTask() {
        long start = System.currentTimeMillis();
        System.out.println("task begins");
        realSubject.doTask();
        System.out.println("task ends, duration: \t" + (-start + System.currentTimeMillis()) / 1000 + "s");
    }
}
// 客户端代理
public class Client {

    public static void main(String[] args) {
        Subject realSubject = new RealSubject();
        Subject proxy = new Proxy(realSubject);
        proxy.doTask();
    }
}

相关文章

  • JAVA动态代理的实现方式

    1. 静态代理VS动态代理 代理类可以增强被代理对象的方法。可分为静态代理和动态代理。 1.1 静态代理 静态代理...

  • 带你初识Java的代理模式

    Spring AOP是基于动态代理设计模式实现的,相对的就有静态代理 动态代理和静态代理 静态代理 对于静态代理,...

  • 编程常用的设计模式

    动态代理和静态代理 静态代理 动态代理 静态代理与动态代理的区别 JDK中的动态代理和CGLIB 实现动态代理的方...

  • 静态代理、动态代理

    代理分为静态代理和动态代理 按照代理创建的时期,可以分为静态代理和动态代理: (1) 静态代理:由程序员或者...

  • 静态代理

    静态代理, : //创建代理 总结静态代理: 解决: 可以使用动态代理。

  • 静态AOP

    静态代理 代理分为静态代理和动态代理。静态代理由程序员创建或工具生成代理类的源码,再编译代理类,所谓静态也就是在程...

  • 设计模式-动态代理模式

    之前介绍了代理模式,大家也都了解了代理模式,不过之前介绍的代理模式是静态代理,静态代理什么意思?静态代理指的是代理...

  • 浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP

    文章目录 Java的静态代理 静态代理的优缺点 ABAP的静态代理 Spring AOP的动态代理 JDK动态代理...

  • 代理-静态代理

    一、静态代理实现 按照代理模式的类图: 静态代理,代理类在编译时生成;即,需要编码代理类。 从实现上来看,静态代理...

  • 动态代理

    根据代理类的生成时间不同可以将代理分为静态代理和动态代理两种。 静态代理 先看下静态代理的例子。以链家中介代理租赁...

网友评论

    本文标题:代理-静态代理

    本文链接:https://www.haomeiwen.com/subject/sopqzqtx.html