• 静态代理


    代理模式是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
    方法调用之后
    
  • 相关阅读:
    开发小技巧:移除不用的接口和代码
    打印维护调整整体偏移值
    设置table表格的单元格间距两种方式
    html中测试div、ul和li、table排列多个块
    LODOP常见问题连接(含常见小问答博文)
    常见问答的点击到链接1
    LODOP中打印项水平居中简短问答
    LODOP设置某打印项锁定下边距
    css选择器测试2-用ul和li简单排版
    LODOP打印超文本有边距不居中的情况2
  • 原文地址:https://www.cnblogs.com/liuzhidao/p/14279582.html
Copyright © 2020-2023  润新知