总览
这篇文章中,我们主要介绍一下结构型设计模式,以及讨论结构型设计模式中代理模式、装饰者模式、适配器模式和桥接模式有哪些及其差异点。
根据 Gang Of Four (GoF)[设计模式作者]介绍,设计模式可以分为三类,分别为创建型、结构型以及行为型。简单地说,结构模式处理类和对象的组合。 它们提供了使用对象组合和继承来创建某些抽象的不同方式。
代理模式
使用这种模式,我们创建了一个中介,它充当另一个资源的接口,例如文件、连接。 这种辅助访问为真实组件提供了替代品,并保护它免受底层复杂性的影响。
差异点:
代理提供与其持有引用的对象相同的接口,并且它不会以任何方式修改数据; 它与分别改变和装饰预先存在的实例的功能的适配器和装饰器模式形成对比
代理通常在编译时拥有关于真实主体的信息,而装饰器和适配器在运行时被注入,只知道实际对象的接口
装饰者模式
此模式对于增强对象的行为非常有用。
差异点:
尽管代理模式和装饰器模式具有相似的结构,但它们的意图不同; 虽然 Proxy 的主要目的是促进易用性或受控访问,但装饰者附加了额外的责任
代理模式和适配器模式都持有对原始对象的引用
装饰者模式中的所有装饰器都可以无限次递归使用,这是其他模型无法实现的
适配器模式
适配器模式用于连接两个不兼容的接口,否则无法直接连接。 适配器用新接口包装现有类,使其与所需接口兼容。
差异点:
代理提供相同的接口,而适配器提供与其客户端兼容的不同接口
在设计应用程序组件之后使用适配器模式,以便我们可以在不修改源代码的情况下使用它们。 这与在设计组件之前使用的桥接模式形成对比。
桥接模式
桥接模式用于将抽象与其实现分离,以便两者可以独立变化。
这意味着创建一个桥接接口,该接口使用 OOP 原则将职责分离到不同的抽象类中。
差异点:
桥接模式只能在设计应用程序之前实现。
允许抽象和实现独立更改,而适配器模式使不兼容的类可以一起工作