Separates an object’s interface from its implementation so the two can vary independently. 将对象的实现层和抽象层解耦。

    即:抽象部分和实现部分分离,使它们能够独立地变化。


    动机:一个抽象有多个实现的时候,可以使用 Bridge 来将 抽象和实现分离

    适用性:不希望抽象和实现部分有一个固定的关系。比如在程序运行的时刻部分需要被选择或者替换的情况;期望对不同的抽象接口和实现部分进行组合和扩展。


    结构代码

    1. class Dialog {
    2. public dialogImp: DialogImp;
    3. public drawBorder() {
    4. this.dialogImp.drawBorder();
    5. }
    6. }
    7. abstract class DialogImp {
    8. private window;
    9. public drawBorder() {
    10. this.window.drawBorder();
    11. }
    12. }
    13. class XWindowDialogImp extends DialogImp {
    14. public drawBorder() {}
    15. }
    16. class MacDialogImp extends DialogImp {
    17. public drawBorder() {}
    18. }
    19. class WarningDialog extends Dialog {
    20. public drawBorder() {
    21. this.dialogImp.drawBorder();
    22. }
    23. }

    实现细节:

    • Implementor 对象需要被创建,并且保持单一性。
    • 共享 Implementor 也是一种在多个对象间共享实现的方式。

    适用性:

    • 当你不希望抽象和实现由捆绑关系,期望在运行时刻实现部分可以被选择或者切换。
    • 类的抽象及其子类的抽象和实现都应该可以通过生成子类的方法加以扩充。这时 Bridge 模式使你可以对不同的抽象接口和实现部分进行组合,并分别对其做扩充。

    效果:

    • 提高可扩充性。
    • 实现细节对客户透明。