桥接
桥接模式非常简单,它可以有效地将抽象与实现解耦,从而使两者可以独立变化。
当类经常变化时,桥接接口和具体类可以让开发人员更轻松地变化他们的类。
让我们提出一个通用的信使接口(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.