代理、装饰器、适配器和桥接模式

2023/05/26

1. 简介

在本文中,我们重点介绍Java中的结构型设计模式,并讨论它们是什么以及它们之间的一些根本区别。

2. 结构型设计模式

根据四人帮(GoF),设计模式可以分为三种类型:

  1. 创建型
  2. 结构型
  3. 行为型

简单地说,结构型模式处理类和对象的组合。它们提供了使用对象组合和继承来创建某种抽象的不同方式。

3. 代理模式

通过这种模式,我们创建了一个中介,充当另一个资源(例如文件、连接)的接口。这种辅助访问为实际组件提供了代理,并保护它免受底层复杂性的影响。

有关该模式的详细示例,请查看专门的帖子:Java中的代理模式

区分要点:

  • 代理提供与它持有引用的对象相同的接口,并且它不以任何方式修改数据;它与适配器和装饰者模式形成对比,它们分别改变和装饰预先存在的实例的功能
  • 代理通常在编译时本身拥有关于真实对象的信息,而装饰者和适配器在运行时被注入,只知道实际对象的接口

4. 装饰者模式

此模式对于增强对象的行为非常有用,有关详细概述,请查看此处的重点教程:Java中的装饰器模式

区分要点:

  • 尽管代理模式和装饰器模式具有相似的结构,但它们的意图不同;虽然代理的主要目的是促进易用性或受控访问,但装饰者附加了额外的责任
  • 代理和适配器模式都持有对原始对象的引用
  • 这个模式中的所有装饰器都可以递归使用,无限次,这在其他模型中是不可能的

5. 适配器模式

适配器模式用于连接两个不兼容的接口,否则无法直接连接。适配器使用新接口包装现有类,以便它与所需的接口兼容。

详细的描述和实现可以查看专门的帖子:Java中的适配器模式

适配器和代理模式之间的主要区别是

  • 虽然代理提供相同的接口,但适配器提供与其客户端兼容的不同接口
  • 适配器模式是在应用程序组件设计完成后使用的,这样我们就可以在不修改源代码的情况下使用它们,这与在设计组件之前使用的桥接模式形成对比。

6. 桥接模式

桥接模式用于将抽象与其实现解耦,以便两者可以独立变化

这意味着创建一个桥接接口,该接口使用OOP原则将职责分离到不同的抽象类中。

详细的描述和实现可以查看专门的帖子:Java中的桥接模式

区分要点:

  • 桥接模式只能在设计应用程序之前实现
  • 允许抽象和实现独立更改,而适配器模式使不兼容的类可以协同工作

7. 总结

在本文中,我们重点介绍了结构型设计模式及其某些类型之间的差异。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章