结构性型模式概述01--代理模式

时间:2022-10-28 12:58:05


结构性型模式概述:

Java-JDK动态代理 详解(AOP)
动态代理是如何实现的?JDK Proxy 和 CGLib 有什么区别?

文章目录

概述:

  • 结构性模式描述如何将类或对象按某种布局组成更大的结构,
  • 分为: 类结构型模式(采用继承机制来组织接口和类)和对象结构型模式(采用组合或聚合来组织对象),

由于组合关系或聚合关系比继承关系耦合低,满足"合成复用原则",所以对象结构模式比类结构模式具有更大的灵活性.

结构型模式分为以下7种

  1. 代理(Proxy)模式:
    为对象提供一种代理以控制该对象的访问,即客户端通过代理间接地访问该对象,从而限制,增强或修改该对象的一些属性
  2. 适配器(Adapter)模式:
    将一个类的结构转换成客户希望的另外的一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作
  3. 桥接模式(Bridge):
    将抽象与现实分离,是他们可以独立变化,它是用组合关系模式代替继承关系
  4. 装饰模式(Decorator):
    动态地给对象增加一些职责,即增加其额外的功能。
  5. 外观模式(Facade):
    为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。
  6. 享元模式(Flyweight):
    运用共享技术来有效地支持大量细粒度对象的复用。
  7. 组合模式(Composite):
    将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。

除了适配器模式:分为结构型模式和对象结构性模式两种,其他的全部数去对象结构模式

代理模式

Java-JDK动态代理 详解(AOP)

定义:

由于默写原有需要给某对象提供一个代理以控制该对象的访问,这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象直接的而中介

优点:

  1. 在客户端与目标对象之间起到一个中介作用和保护目标对象的作用
  2. 代理对象可以扩展目标对象的功能
  3. 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度,增加 程序的可扩展性

缺点:

  • 代理模式会造成系统设计种类的数量增加
  • 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢
  • 增加了系统的复杂性

那么如何解决以上提到的缺点呢?答案是可以使用动态代理方式

代理模式的结构与实现

他通过定义一个继承抽象主题的代理来包含真实主题,从而实现对真实主题的访问,

模式结构

  • 抽象主题类:
    通过接口或抽象类声明真实主题和代理对象实现的业务方法。
  • 真实主题类
    实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
  • 代理类
    提供了与真实主题相同的接口,其内部含有真实主题的引用,它可以访问控制或扩展真实的主题功能
  • 结构性型模式概述01--代理模式

代理模式分为静态代理和动态代理

  • 静态
    由程序员创建代理类或特定工具自动生成源代码再对其编译,在程序运行前代理类的, class文件就已经存在
  • 动态
    在程序运行时,运用反射机制动态创建而成

代理模式的引用场景

当无法或者不想之间引用某个对象或访问某个对象存在困难时,可以通过代理对象来间接访问:一是保护目标对象,二增强目标对象