代理模式:
    代理模式分为静态代理和动态代理:静态代理是由程序员创建或特定工具自动生成源代码,再对其编译,在程序员运行之前,代理类.class文件就已经被创建了;而动态代理是在程序运行时通过反射机制动态创建的
    image.png
    image.png
    静态代理主要是创建一个被代理类和一个代理类,可通过创建被代理类的抽象类对可被代理的范围进行进一步扩大,在代理类中有一个被代理类的属性,在代理类的构造函数中进行注入被代理类,这样在代理类中的方法可以使用被代理类的方法,对被代理类进行进一步扩展。
    image.png
    image.png
    JDK动态代理(需要实现接口):不需要手动创建代理类,只需要编写一个动态处理器即可,真正的代理对象由JDK再运行时为我们动态创建,主要是通过实现InvocationHandler反射来进行动态代理

    CGLIB动态代理:
    image.png
    JDK实现动态代理需要实现类通过接口定义业务方法,对于没有接口的类,如何实现动态代理呢?这就需要CGLIB,CGLIB采用了底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑,但因为采用的是继承,所以不能对final修饰的类进行代理,JDK动态代理与CGLIB动态代理均是实现SpringAOP的基础。
    image.png
    image.png
    CGLIB创建的动态代理对象比JDK创建的动态代理对象的性能更高,但是CGLIB创建代理对象所花费的时间却比JDK多得多,所以对于单例的对象,因为无需频繁创建对象,用CGLIB合适,反之使用JDK方式要更为合适一些。同时由于CGLIB采用动态创建子类的方法,对于final修饰的方法无法进行代理。

    适配器模式:
    image.png
    image.png

    桥接模式:
    image.png
    该模式主要是把实现与抽象进行分离,从而达到提升扩展能力的目的,不同品牌的电脑适配不同大小的内存,创建电脑需要注入内存属性,在该模式中将电脑品牌和内存大小均作为抽象类,创建各式的子类,可以进行随意的组合搭配,即为桥接模式。

    装饰器模式:
    image.png
    image.png
    装饰器模式针对的问题是需要扩展一个类的功能,或者给一个类增加附加的责任,需要动态的给一个对象增加功能,这些功能可以再动态的撤销;需要增加一些基本功能的排列组合而产生的非常大量的功能(有点像桥接模式,也有点像适配器模式),例子为制作咖啡加料

    外观模式:
    image.png
    外观模式大致内容为统一所有对接的方法,例如买卖方法,无论哪个子类需要进行业务对接时,均能在外观类调用对应的方法进行处理。
    image.png

    享元模式:
    享元模式摈弃了在每个对象中存储所有数据的模式,通过共享多个对象所共有的相同状态,让我们能够在有限的容量中装下更多的对象
    image.png
    例子:要创建多个模板类似的网站,甚至只需要修改网站标题即可,创建一个网站实体类,将其公共属性网站标题提取出来,公共属性放置在其构造器上,非公共属性的固定属性可直接定死,然后再创建一个工厂类,专门制造网站的工厂,工厂类中创建一个制造方法,同时用一个池将已创建的对象存储起来,工厂的制造方法制作对象时先去池中寻找,若没有则创建,创建时设置公共属性即可,通过公共属性在池内寻找类似的模板即可。
    image.png
    image.png
    组合模式:
    组合模式又叫部分整体模式,组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
    image.png
    组合类中存在一个集合属性,可以进行同类的多层嵌套,故能组成树形结构

    过滤器模式:
    image.png
    对对象进行一定的条件筛选即为过滤器模式