java - 桥接模式是否将抽象与实现分离?

标签 java design-patterns abstraction bridge

我从不同的文章中学习了桥接模式,并且根据我的理解实现了它。让我困惑的一件事是桥梁模式说

BridgePattern 将抽象与其实现分离,因此两者可以独立变化

这句话是什么意思?实现驻留在单独的 jar 中吗?

vary independently statement 是什么意思?

考虑提供的 journaldev文章,详述答案。

非常感谢任何帮助。

最佳答案

BridgePattern 将抽象与其实现分离

抽象实现 可以独立变化,因为具体类不直接实现抽象(接口(interface))

UML Diagram from Wikipedia

要点: 两个正交类层次结构(抽象层次结构y 和实现层次结构)使用组合(而不是继承)。这种组合有助于两个层次结构独立变化。

实现从不涉及抽象。抽象包含实现接口(interface)作为成员(通过组合)。

回到您关于 journaldev 中示例代码的问题文章:

形状是抽象

三角形是重新定义的抽象

颜色是实现者

RedColor 是 ConcreteImplementor

一个具体的 Shape 对象:Triangle 扩展了 Shape 但没有实现 Color 接口(interface)。

public class Triangle extends Shape{
}

RedColorGreenColor 实际上实现了 Color 接口(interface)。

Concrete Shape 对象(Triangle)独立于实现抽象(即 Color 接口(interface))。

Shape tri = new Triangle(new RedColor());

此处的Triangle 包含一个具体的Color 对象(Composition)。如果Color抽象(接口(interface))发生变化,RedColorGreenColor负责实现Color界面。

Shapes,如 Triangle 不受 Color 界面契约(Contract)变化的影响。所以 Color 界面可以独立变化。这是可能的,因为 Shape 持有使用Composition 而不是implementation 的合约。

总结,

  1. 桥是一种结构模式
  2. 抽象和实现在编译时不受约束
  3. 抽象和实现 - 两者都可以在不影响客户的情况下发生变化

在以下情况下使用桥接模式:

  1. 您想要实现的运行时绑定(bind),
  2. 您有来自耦合接口(interface)和大量实现的类的激增,
  3. 您想在多个对象之间共享一个实现,
  4. 您需要映射正交类层次结构。

有用的链接:

tutorialspoint文章

dzone文章

oodesign文章

sourcemaking文章

相关文章:

When do you use the Bridge Pattern? How is it different from Adapter pattern?

关于java - 桥接模式是否将抽象与实现分离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35079629/

相关文章:

java - 找不到符号类 IOException

java - Android 播放 Vimeo 视频

c# - 为 DDD 中的实体生成身份

javascript - 双向流转换器的设计模式

oop - 域对象和值对象-它们相等吗?

java - 包可见性

java - 为什么这个 while 循环不结束?

java - Mysql,Hibernate - 插入表时,它说字段没有默认值

Grails 域类 id 继承

design-patterns - 什么是复杂动画的好的抽象?