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毫秒!

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

  • 相关阅读:
    无法将类型为“xxxx”的对象强制转换为类型“Microsoft.SharePoint.WebPartPages.WebPart”。
    [win32 api] FindWindow FindWindowEx EnumChildWindows
    WPF线程中被修改后DataGrid数据不能及时更新的问题
    Android Adapter 与 Listview
    LINQ 查询操作及进行数据转换
    匿名方法lambda表达式
    WPF知识4 依赖属性
    LINQ 入门
    WPF绑定.NET对象(二)Visifire的数据绑定
    LINQ 查询操作中的类型关系
  • 原文地址:https://www.cnblogs.com/itiande/p/9037193.html
Copyright © 2011-2022 走看看