• java静态代理模式


    代理模式分为动态代理和静态代理。

    静态代理简述:

      1、为其他对象提供一种代理,以控制对这个对象的访问。

      2、代理对象会起到中介的作用,可以增加些功能,也可以去掉某些功能。

    静态代理:

      代理和被代理对象在代理之前就是确认的,他们都是实现了相同的接口或者继承了相同的抽象类。

    常见的代理模式:

    虚拟代理:

    当我们在浏览帖子的时候,有些页面加载很多图片,但是刚打开网页的时候,这些图片都是默认logo,当图片加载完成的时候才会显示出来,当图片被加载的时候,也不会影响我们观看文字。

    下面是静态代理的Demo:

    首先是一个小汽车,增加行驶的方法:

    public interface Moveable {
    
        //增加一个行驶的接口
        void move();
    }

    创建汽车类,实现move方法:

    public class Car implements Moveable {
    
        @Override
        public void move() {
    
            //实现开车,开车时间为1秒钟
            try {
                Thread.sleep(new Random().nextInt(1000));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    最后我们创建Car2类,继承Car类,重写move()方法,并在实现的前后增加业务:

        @Override
        public void move() {
            long starttime = System.currentTimeMillis();
            System.out.println("汽车开始行驶...");
            super.move();
            long endtime = System.currentTimeMillis();
            System.out.println("汽车结束行驶...");
            System.out.println("汽车行驶时间:" + (endtime - starttime) + "毫秒!");
        }
    
        public static void main(String[] args) {
            Moveable m = new Car2();
            m.move();
        }
    }

    输出结果:

    汽车开始行驶...
    汽车结束行驶...
    汽车行驶时间:868毫秒!

     以上就是使用继承的方式,实现的简单的静态代理,在汽车行驶的时候增加记录时间的业务,但是不推荐使用继承的方式实现代理,如果业务逻辑很多的话,代码会无限的膨胀下去。

  • 相关阅读:
    SpringBoot HATEOAS用法简介
    犀函
    dubbo 相关面试题 有用(转)
    想使用消息队列,先考虑下这些问题!
    appium在Mac上环境搭建
    3. SOFAJRaft源码分析— 是如何进行选举的?
    Redis相关知识
    替代微信ipad协议(转)
    c#面试题(1)(转)
    例题6-5 Boxes in a line uVa12657
  • 原文地址:https://www.cnblogs.com/itiande/p/9037193.html
Copyright © 2020-2023  润新知