桥接

桥接模式非常简单,它可以有效地将抽象与实现解耦,从而使两者可以独立变化。

当类经常变化时,桥接接口和具体类可以让开发人员更轻松地变化他们的类。

让我们提出一个通用的信使接口(Messenger.php),它可以发送某种形式的信息:

Unresolved include directive in modules/ROOT/pages/ch04/ch4-06.adoc - include::example$/Chapter 4/Bridge/Messenger.php[]

该接口的一个具体实现是 InstantMessenger 应用程序 InstantMessenger.php

Unresolved include directive in modules/ROOT/pages/ch04/ch4-06.adoc - include::example$/Chapter 4/Bridge/InstantMessenger.php[]

同样,我们可以对 SMS 应用程序 SMS.php 执行相同的操作:

Unresolved include directive in modules/ROOT/pages/ch04/ch4-06.adoc - include::example$/Chapter 4/Bridge/SMS.php[]

我们现在可以为物理设备、发射器(如果愿意的话)创建一个接口(Transmitter.php):

Unresolved include directive in modules/ROOT/pages/ch04/ch4-06.adoc - include::example$/Chapter 4/Bridge/Transmitter.php[]

我们可以使用 Device 类将发射器与实现其方法的设备解耦。 Device 类将 Transmitter 接口桥接到物理设备(Device.php):

Unresolved include directive in modules/ROOT/pages/ch04/ch4-06.adoc - include::example$/Chapter 4/Bridge/Device.php[]

因此,让我们组合一个具体的类来表示电话(Phone.php):

Unresolved include directive in modules/ROOT/pages/ch04/ch4-06.adoc - include::example$/Chapter 4/Bridge/Phone.php[]

让我们对平板电脑做同样的事情(Tablet.php):

Unresolved include directive in modules/ROOT/pages/ch04/ch4-06.adoc - include::example$/Chapter 4/Bridge/Tablet.php[]

最后,让我们将它们全部包装在一个 index.php 文件中:

Unresolved include directive in modules/ROOT/pages/ch04/ch4-06.adoc - include::example$/Chapter 4/Bridge/index.php[]

其输出如下:

SMS: Hello there!
Sent from a phone.