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(); } }