Bridge功能:在“类的功能层次结构”和“类的实现层次结构”之间搭建桥梁。
类的功能层次结构:父类具有基本功能,在子类中增加新的功能。
类的实现层次结构:父类通过声明抽象方法定义接口,子类通过实现具体方法来实现接口。
示例:“显示一些东西”
类的功能层次结构:Display类(Abstraction抽象类)
public class Display {
private DisplayImpl impl; //imp对象就是“桥梁”
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();
}
}
类的功能层次结构:CountDisplay类(RefinedAbstraction扩充抽象类)
public class CountDisplay extends Display {
public CountDisplay(DisplayImpl impl) {
super(impl);
}
public void multiDisplay(int times) { // 循环显示times次
open();
for (int i = 0; i < times; i++) {
print();
}
close();
}
}
类的实现层次结构:DisplayImpl类(Implementor实现类接口)
public abstract class DisplayImpl {
public abstract void rawOpen();
public abstract void rawPrint();
public abstract void rawClose();
}
类的实现层次结构:StringDisplayImpl类(ConcreteImplementor实现类接口)
public class StringDisplayImpl extends DisplayImpl {
private String string; // 要显示的字符串
private int width; // 以字节单位计算出的字符串的宽度
public StringDisplayImpl(String string) { // 构造函数接收要显示的字符串string
this.string = string; // 将它保存在字段中
this.width = string.getBytes().length; // 把字符串的宽度也保存在字段中,以供使用。
}
public void rawOpen() {
printLine();
}
public void rawPrint() {
System.out.println("|" + string + "|"); // 前后加上"|"并显示
}
public void rawClose() {
printLine();
}
private void printLine() {
System.out.print("+"); // 显示用来表示方框的角的"+"
for (int i = 0; i < width; i++) { // 显示width个"-"
System.out.print("-"); // 将其用作方框的边框
}
System.out.println("+"); // 显示用来表示方框的角的"+"
}
}
Main类:
public class Main {
public static void main(String[] args) {
Display d1 = new Display(new StringDisplayImpl("Hello, 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);
}
}
Abstraction(抽象化) | 使用Implementor的方法定义了基本的功能(类的功能层次结构) |
RefinedAbstraction(改善后的抽象化) | 在Abstraction角色的基础上增加了新功能的角色(类的功能层次结构) |
Implementor(实现者) | 定义了用于实现Abstraction角色的接口的方法(类的实现层次结构) |
ConcreteImplementor(具体实现者) | 实现Implementor角色中定义的接口(类的实现层次结构) |