• 设计模式-代理模式


    作为aop的实现技术支持,代理模式应该是最被人熟知的,代理模式用大白话来说,类似一个中介,可以进行方法的增强或者修改(Ps:我觉得静态代理模式和命令模式好像,命令模式也可以在具体命令类里调用接收者前后进行环绕增强,只不过无法修改方法只能进行拓展)

    当我们不方便直接调用一个类的时候 可以使用代理模式,直接看代码吧

    公共特征类

    public interface Animal {
        void eat();
    }

    具体实现类

    public class Dog implements Animal {
        @Override
        public void eat() {
            System.out.println("小狗要吃饭");
        }
    }

    代理类

    public class DogProxy  implements Animal{
       Dog dog;
    
        @Override
        public void eat() {
           //执行之前的操作
            System.out.println("吃饭前的准备");
            dog.eat();
            //执行之后的操作
            System.out.println("吃饭后");
        }
    
        public DogProxy(Dog dog) {
            this.dog = dog;
        }
    
    }

    测试类

    public class Client {
        public static void main(String[] args) {
            new DogProxy(new Dog()).eat();
        }
    }

    这种代理模式的缺点就是 每增加一个具体实现类 都要增加一个代理类,这种代理也叫静态代理,是一种在编译期就确定好的代理方式

    还有另一种通过反射来进行代理的方式,叫动态代理。这两种代理方式都需要被代理类实现接口,代理类实现与代理类的统一接口以便修改方法。还有另一种技术字节码代理,常见的有cglib和asm。

    代理类的核心就是创建代理类代理原类进行执行,因为实现了同一接口可以更方便的修改和增强。

    不和别人一样,不复制只真正理解
  • 相关阅读:
    几个论坛上看到的2015小米笔试题
    Line(扩展欧几里得)
    MapReduce编程之倒排索引
    annotation(@Retention@Target)详解
    【JEECG技术文档】JEECG平台对外接口JWT应用文档V3.7.2
    jeecg 模糊查询
    jeecg下实现自动默认模糊查询
    The packaging for this project did not assign a file to the build artifact
    Maven添加本地Jar包
    maven 如何引入本地jar包
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12784937.html
Copyright © 2020-2023  润新知