zoukankan      html  css  js  c++  java
  • java动态代理和静态代理

    代理是英文 Proxy 翻译过来的。我们在生活中见到过的代理,大概最常见的就是朋友圈中卖面膜的同学了。

    她们从厂家拿货,然后在朋友圈中宣传,然后卖给熟人。

     静态代理

    我们平常去电影院看电影的时候,在电影开始的阶段是不是经常会放广告呢?

    电影是电影公司委托给影院进行播放的,但是影院可以在播放电影的时候,产生一些自己的经济收益,比如卖爆米花、可乐等,然后在影片开始结束时播放一些广告。

    现在用代码来进行模拟。

    首先得有一个接口,通用的接口是代理模式实现的基础。这个接口我们命名为 Movie,代表电影播放的能力。

    package com.example.demo.user.controller;
    
    /**
     * @author liubh
     * @date 2021/1/7 9:44
     **/
    public interface Movie {
        void play();
    }

    目标对象实现接口

    package com.example.demo.user.controller;
    
    /**
     * @author liubh
     * @date 2021/1/7 9:44
     **/
    public class MovieImpl implements Movie {
        @Override
        public void play() {
            System.out.println(演电影);
        }
    }

    代理类

    package com.example.demo.user.controller;
    
    /**
     * @author liubh
     * @date 2021/1/7 12:24
     **/
    public class StaticMovieProxy implements Movie{
        private Movie movie;
    
        public StaticMovieProxy(Movie movie) {
            this.movie = movie;
        }
    
        @Override
        public void play() {
            System.out.println("卖爆米花");
            movie.play();
            System.out.println("退场");
    
        }
    }

    测试类

      public static void main(String[] args) {
            StaticMovieProxy proxy=new StaticMovieProxy(new MovieImpl());
            proxy.play();
        }

    动态代理

    package com.example.demo.user.controller;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    /**
     * @author liubh
     * @date 2021/1/7 9:45
     **/
    public class DynamicPoxy implements InvocationHandler {
        private Object movie;
    
        public DynamicPoxy(Movie movie) {
            this.movie = movie;
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            System.out.println("卖爆米花");
            method.invoke(movie);
            System.out.println("退场");
            return null;
        }
    }
     public static void main(String[] args) {
            Movie o = (Movie) Proxy.newProxyInstance(MovieImpl.class.getClassLoader(), MovieImpl.class.getInterfaces(), new DynamicPoxy(new MovieImpl()));
            o.play();
        }

     

  • 相关阅读:
    kali更新源
    中国Linux源镜像站大全
    火狐浏览器Firefox上DownThemAll插件
    使用 backdoor 工具注入ShellCode
    动态加载 ShellCode绕过杀软
    渗透测试的本质与沉思
    Payload 实现分离免杀
    XSS跨站攻击靶场-通关笔记
    Web文件上传靶场
    Python 常用外部模块详解
  • 原文地址:https://www.cnblogs.com/liubaihui/p/14245810.html
Copyright © 2011-2022 走看看