读书笔记 仅供参考
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 对象就是将两者连接起来的桥梁。