将类的功能层次结构与实现层次结构分离
Bridge 模式
Bridge 模式的作用是将类的功能层次结构和类的实现层次结连接起来。
类的层次结构的两个作用:
-
希望增加新的功能时
父类具有基本功能,在子类中增加新的功能。(类的功能层次结构)
-
希望增加新的实现时
父类通过声明抽象方法来定义接口,子类通过实现具体方法来实现接口。(类的实现层次结)
示例程序
DisplayImpl.java(Implementor)
package bridge;
public abstract class DisplayImpl {
public abstract void rawOpen();
public abstract void rawPrint();
public abstract void rawClose();
}
Display.java(Abstraction)
package bridge;
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();
}
}
CountDisplay.java(RefinedAbstraction)
package bridge;
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();
}
}
StringDisplayImpl.java(ConcreteImplementor)
package bridge;
public class StringDisplayImpl extends DisplayImpl {
private String string;
private int width;
public StringDisplayImpl(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++) {
System.out.print("-");
}
System.out.println("+");
}
}
Bridge 中登场的角色
-
Abstraction(抽象化)
该角色位于“类的功能层次结构”的最上层。它使用Implementor角色的方法定义了基本的功能。
-
RefinedAbstraction(改善后的抽象化)
在Abstraction角色的基础上增加了新的功能的角色。
-
Implementor(实现者)
该角色位于“类的实现层次结构”的最上层。它定义了用于实现Abstraction角色的接口的方法。
-
ConcreteImplementor(具体实现者)
该角色负责实现在Implementor角色中定义的接口。
拓展思路
分开后更容易扩展,增加后的功能可以被“所有的实现”使用。
网友评论