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

    代理模式是23种设计模式之一,提供了对目标对象额外的访问方式,即通过代理对象来访问目标对象,扩展业务功能,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能(满足开闭原则)。
    简而言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。
    举一个生活中常见的例子:租房。房东就是目标对象,它需要出租自己的房屋,中介就是代理对象,它代理房东出租房屋,并且进行业务扩展(查看房源,签合同,收中介费等等)。

    静态代理

    这种代理方式需要代理对象个目标对象(委托者)实现一样的接口。
    优点:满足开闭原则 可以在不修改目标对象的前提下,扩展目标对象的功能。
    缺点:
    1、冗余。代理对象和目标对象(委托者)要实现一样的接口,会产生过多的代理类 (一个目标类对应一个代理对象)
    2、不易维护。一旦接口增加方法,目标对象和代理对象都需要进行修改。

    • 接口类
    public interface UserService {
        void select();
        void update();
    }
    
    
    • 目标对象
    public class UserServiceImpl implements UserService{
        @Override
        public void select() {
            System.out.println("查询 selectById");
        }
    
        @Override
        public void update() {
            System.out.println("更新 update");
        }
    }
    
    • 静态代理类 同样需要实现接口,在其中进行业务扩展
    public class UserServiceProxy implements UserService {
        private UserService target; // 被代理的对象
    
        public void setTarget(UserService target) {
            this.target = target;
        }
    
        @Override
        public void select() {
            before();
            target.select();
            after();
        }
        @Override
        public void update() {
            before();
            target.update();
            after();
        }
        private void before(){ //执行之前
            System.out.println("方法调用之前");
        }
        private void after(){ //执行之后
            System.out.println("方法调用之后");
        }
    }
    
    • 客户端
    public class Client1 {
        public static void main(String[] args) {
            UserService userServiceImp = new UserServiceImpl();
            UserServiceProxy proxy = new UserServiceProxy();
            proxy.setTarget(userServiceImp);
            proxy.select();
            proxy.update();
    
        }
    }
    
    
    • 结果
    方法调用之前
    查询 selectById
    方法调用之后
    方法调用之前
    更新 update
    方法调用之后
    
  • 相关阅读:
    include与php://input执行任意命令
    php Session反序列化漏洞
    php代码审计-file_get_contents()&file_put_contents()
    php代码审计-用户名和密码分开检验
    php -- get_magic_quotes_gpc()函数
    md5(“ffifdyop“,true)
    php弱类型相关
    BurpWeb安全学院之XXE
    ICMP隐藏通信隧道技术
    BurpWeb安全学院之敏感信息泄露
  • 原文地址:https://www.cnblogs.com/liuzhidao/p/14279582.html
Copyright © 2011-2022 走看看