结构性型模式概述:
Java-JDK动态代理 详解(AOP)
动态代理是如何实现的?JDK Proxy 和 CGLib 有什么区别?
文章目录
- [Java-JDK动态代理 详解(AOP)](javascript:void(0))
- [动态代理是如何实现的?JDK Proxy 和 CGLib 有什么区别?](javascript:void(0))
- 概述:
- 代理模式
- 模式结构
概述:
- 结构性模式描述如何将类或对象按某种布局组成更大的结构,
- 分为: 类结构型模式(采用继承机制来组织接口和类)和对象结构型模式(采用组合或聚合来组织对象),
由于组合关系或聚合关系比继承关系耦合低,满足"合成复用原则",所以对象结构模式比类结构模式具有更大的灵活性.
结构型模式分为以下7种
- 代理(Proxy)模式:
为对象提供一种代理以控制该对象的访问,即客户端通过代理间接地访问该对象,从而限制,增强或修改该对象的一些属性 - 适配器(Adapter)模式:
将一个类的结构转换成客户希望的另外的一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作 - 桥接模式(Bridge):
将抽象与现实分离,是他们可以独立变化,它是用组合关系模式代替继承关系 - 装饰模式(Decorator):
动态地给对象增加一些职责,即增加其额外的功能。 - 外观模式(Facade):
为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。 - 享元模式(Flyweight):
运用共享技术来有效地支持大量细粒度对象的复用。 - 组合模式(Composite):
将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。
除了适配器模式:分为结构型模式和对象结构性模式两种,其他的全部数去对象结构模式
代理模式
Java-JDK动态代理 详解(AOP)
定义:
由于默写原有需要给某对象提供一个代理以控制该对象的访问,这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象直接的而中介
优点:
- 在客户端与目标对象之间起到一个中介作用和保护目标对象的作用
- 代理对象可以扩展目标对象的功能
- 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度,增加 程序的可扩展性
缺点:
- 代理模式会造成系统设计种类的数量增加
- 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢
- 增加了系统的复杂性
那么如何解决以上提到的缺点呢?答案是可以使用动态代理方式
代理模式的结构与实现
他通过定义一个继承抽象主题的代理来包含真实主题,从而实现对真实主题的访问,
模式结构
- 抽象主题类:
通过接口或抽象类声明真实主题和代理对象实现的业务方法。 - 真实主题类
实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。 - 代理类
提供了与真实主题相同的接口,其内部含有真实主题的引用,它可以访问控制或扩展真实的主题功能
代理模式分为静态代理和动态代理
- 静态
由程序员创建代理类或特定工具自动生成源代码再对其编译,在程序运行前代理类的, class文件就已经存在 - 动态
在程序运行时,运用反射机制动态创建而成
代理模式的引用场景
当无法或者不想之间引用某个对象或访问某个对象存在困难时,可以通过代理对象来间接访问:一是保护目标对象,二增强目标对象