zoukankan      html  css  js  c++  java
  • 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毫秒!

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

  • 相关阅读:
    达梦数据库学习(二、管理数据库实例)
    达梦数据库学习(一、linux操作系统安装及数据库安装)
    SQL Server 数据库还原进度查看
    关于索引的学习(主要是聚集索引与非聚集索引)
    SQL Server批量向表中插入多行数据语句
    最大流-前置push-relabel算法实现
    调度算法(二)
    调度算法(一)
    软件工程:提问回顾
    软件工程:个人阅读作业与总结
  • 原文地址:https://www.cnblogs.com/itiande/p/9037193.html
Copyright © 2011-2022 走看看