图解设计模式 - Bridge 模式

本文是关于Bridge设计模式的读书笔记。Bridge模式将类的功能层次结构与实现层次结构解耦,使得两者可以独立扩展。Abstraction和RefinedAbstraction构成功能层次,Implementor和ConcreteImplementor组成实现层次。通过Implementor对象作为桥梁,实现功能与实现的解耦。举例说明了在装饰文本程序中的应用。
摘要由CSDN通过智能技术生成

读书笔记 仅供参考

Bridge 模式

将类的功能层次结构和类的实现层次结构相连接

类的层次结构

类的功能层次结构
  • 父类具有基本结构
  • 在子类中增加新的功能
类的实现层次结构
  • 父类通过声明抽象方法来定义接口(API)
  • 子类通过实现具体方法来实现接口(API)

UML 和角色

Abstraction

位于“功能层次结构”顶层,角色保存了 Implementor 的实例

RefinedAbstraction

继承 Abstraction,添加新功能。

Implementor

位于“实现层次结构”的顶层,定义了用于实现 Abstraction 角色接口(API)的方法。

ConcreteImplementor

负责实现 Implementor 定义的接口(API)。

这里写图片描述

例子

例程是一个装饰文本的程序,Display 类担任 ABstraction 角色,它的方法都通过 DisplayImpl(抽象类,担任 Implementor 角色) 类定义的方法来实现。CountDisplay 类继承 Display,并添加了一个新方法。StringDisplayImpl 继承 DisplayImpl,实现了定义的方法。Display 和 CountDisplay 属于功能层次结构,DisplayImpl 和 StringDIsplayImpl 属于实现层次结构。

public class Display {
    private DisplayImpl impl;
    public Display(DisplayImpl impl) {
        this.impl = impl;
    }

    public void open() {
        impl.rawOpen();
    }

    public void print() {
        impl.rawPrint();
    }

    public void close() {
        impl.rawClose();
    }

    public final void display() {
        open();
        print();
        close();
    }
}
public class CountDisplay extends Display {
    public CountDisplay(DisplayImpl impl) {
        super(impl);
    }

    public void multiDisplay(int times) {
        open();
        for(int i = 0; i<times; i++) {
            print();
        }
        close();
    }
}
public abstract class DisplayImpl {
    public abstract void rawOpen();
    public abstract void rawPrint();
    public abstract void rawClose();
}
public class StringDisplayImpl extends DisplayImpl {
    private String string;
    private int width;

    public StringDisplayImpl(String string) {
        this.string = string;
        this.width = string.getBytes().length;
    }

    @Override
    public void rawOpen() {
        printLine();
    }

    @Override
    public void rawPrint() {
        System.out.println("|" + string + "|");
    }

    @Override
    public void rawClose() {
        printLine();
    }

    private void printLine() {
        System.out.print("+");
        for(int i = 0; i < width; i++) {
            System.out.print("-");
        }
        System.out.println("+");
    }
}
public class Main {
    public static void main(String[] args) {
        Display d1 = new Display(new StringDisplayImpl("Hrllo, China."));
        Display d2 = new CountDisplay(new StringDisplayImpl("Hello, World."));
        CountDisplay d3 = new CountDisplay(new StringDisplayImpl("Hello, Universe"));

        d1.display();
        d2.display();
        d3.display();
        d3.multiDisplay(5);
    }
}
UML

这里写图片描述

要点

Bridge 的特征就是将功能层次结构和实现层次结构分离开来,两者可以独立的扩展。impl 对象就是将两者连接起来的桥梁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值