Swift 4中的桥接模式

桥接模式将抽象与其实现分离开来,以便两者可以独立变化。

当我第一次学到这个时,桥接模式使我非常高兴。 当您不知道确切的业务逻辑要实现时,但是由于项目的截止日期而需要丰富抽象时,它确实可以为您提供帮助。 当业务逻辑来自客户需求时,仅需对业务逻辑进行编码。

类型:结构图案

也称为:手柄/主体

结构体:

参加者:

  1. 抽象:定义抽象的接口。 维护对类型为Implementor的对象的引用。
  2. RefinedAbstraction:扩展Abstraction定义的接口。
  3. 实现者:定义实现类的接口。 该接口不必与Abstraction的接口完全对应。 实际上,这两个接口可以完全不同。 通常,Implementor接口仅提供原语操作,而Abstraction基于这些原语定义更高级别的操作。
  4. ConcreteImplementor:实现Implementor接口并定义其具体实现。

Swift 4实现:

让我们考虑客户的要求是绘制Circle和Rectangle,但是我们仍然不知道如何实现实际绘制这些图形的代码。 在实际情况下,可能由于缺乏几何知识或我们选择绘制哪个数字的第三方图书馆而发生。 那些不知道桥接模式的人将等到完成实际的图形实现后,这可能会延迟开发。 如果在这种情况下遵循Bridge Pattern ,则无需等待实现细节,只需创建我们的抽象类并在整个项目中使用该类即可。 一切都会清楚,让我们继续前进。

抽象基础类。 实施此基类,我们可以扩展抽象并制作将在项目其他部分中使用的具体类。 在下面的示例中, Shape是基础抽象类,而CircleRectangle是我们抽象的具体类。 注意draw()方法,实际上该图不是绘制而是与该类的其他类调用方法链接在一起的。 在这里, GraphicsAPI是称为“实现者”的类。 抽象类调用实现者类的方法,这是Bridge模式的关键部分。

在上面的代码中,编写了所有抽象类。 现在,需要根据业务逻辑/实现选择来实现实现者类。

桥接模式的用法精彩。 桥接模式适合于实现的运行时绑定。 根据我们的示例,您可能会注意到我们有2个具体的实现类。 您可以在运行时选择任何一个。 例如,您可以在运行时使用DirectXAPI / OpenGLAPI绘制“圆形”和“矩形”。

在此处找到完整的源代码:Github