Bridge模式的作用在于将功能层次结构和实现层次结构分离开,方便两边做独立扩展。继承是强耦合,委托是弱耦合。
实现层次
DisplayImpl.java
定义实现的接口
package bridge;
public abstract class DisplayImpl {
public abstract void rawOpen();
public abstract void rawPrint();
public abstract void rawClose();
}
StringDisplayImpl.java
编写具体的实现逻辑
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;
}
@Override
public void rawOpen() {
printLine();
}
private void printLine() {
System.out.print("+");
for (int i = 0; i < width; i++) {
System.out.print("-");
}
System.out.println("+");
}
@Override
public void rawPrint() {
System.out.println("|" + string + "|");
}
@Override
public void rawClose() {
printLine();
}
}
功能层次
Display.java定义基本的功能,调用DisplayImpl完成具体实现,该模式使用了代理模式
package bridge;
public class Display {
private DisplayImpl impl;
public Display(DisplayImpl impl) {
this.impl = impl;
}
public void open() {
this.impl.rawOpen();
}
public void print() {
impl.rawPrint();
}
public void close() {
impl.rawClose();
}
public final void display() {
open();
print();
close();
}
}
功能结构的扩展
CountDisplay.java 新增了multiDisplay函数
package bridge;
public class Display {
private DisplayImpl impl;
public Display(DisplayImpl impl) {
this.impl = impl;
}
public void open() {
this.impl.rawOpen();
}
public void print() {
impl.rawPrint();
}
public void close() {
impl.rawClose();
}
public final void display() {
open();
print();
close();
}
}
测试
package bridge;
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 truth"));
d1.display();
d2.display();
d3.display();
d3.multiDisplay(3);
}
}