Design Patterns : Bridge 2018/11
• 実装クラスから機能クラスを分離し、拡張性を高める。
• 下記例では抽象クラス間で実装が「橋渡し」。
UML
BridgeDriverクラス(abstract)
TypeADriverクラス
TypeBDriverクラス
BridgeHandlerクラス(abstract)
DriverHandlerクラス
Executerクラス
• 実装クラスから機能クラスを分離し、拡張性を高める。
• 下記例では抽象クラス間で実装が「橋渡し」。
UML
BridgeDriverクラス(abstract)
public abstract class BridgeDriver {
public abstract void doSth1();
public abstract void doSth2();
public void doSth3() {
System.out.println("BridgeDriver:doSth3");
}
public void doSth4() {
System.out.println("BridgeDriver:doSth4");
}
}
TypeADriverクラス
public class TypeADriver extends BridgeDriver {
@Override
public void doSth1() {
System.out.println("TypeADriver:doSth1");
}
@Override
public void doSth2() {
System.out.println("TypeADriver:doSth2");
}
}
TypeBDriverクラス
public class TypeBDriver extends BridgeDriver {
@Override
public void doSth1() {
System.out.println("TypeBDriver:doSth1");
}
@Override
public void doSth2() {
System.out.println("TypeBDriver:doSth2");
}
@Override
public void doSth3() {
System.out.println("TypeBDriver:doSth3");
}
}
BridgeHandlerクラス(abstract)
public abstract class BridgeHandler {
protected BridgeDriver driver;
public BridgeHandler(BridgeDriver driver) {
this.driver = driver;
}
public abstract void handle1();
}
※インターフェースにすると分離性を高められる。DriverHandlerクラス
public class DriverHandler extends BridgeHandler {
public DriverHandler(BridgeDriver driver) {
super(driver);
}
@Override
public void handle1() {
System.out.println("handle1 start");
driver.doSth1();
driver.doSth2();
driver.doSth3();
driver.doSth4();
System.out.println("handle1 end");
}
}
Executerクラス
public class Executer {
public static void main(String[] args) {
BridgeHandler handlerA = new DriverHandler(new TypeADriver());
BridgeHandler handlerB = new DriverHandler(new TypeBDriver());
handlerA.handle1();
handlerB.handle1();
}
}