Bridge Pattern http://www.k.hosei.ac.jp/~yukita/ Bridge パターンの目的 • 機能のクラス階層と具体化レベル(抽象 化)のクラス階層を直行させる。 • 具体化レベルは2階層だけのことが多い。 この場合,「実装の切り替え」と言ったほう が分かりやすい。 Bridge Pattern 2 例題のクラス図 Display impl open print close display CountDisplay multiDisplay DisplayImpl rawOpen rawPrint rawClose StringDisplayImpl rawOpen rawPrint rawClose Bridge Pattern 3 クラス一覧 Bridgeのどちら 名前 説明 機能のクラス階層 Display 「表示する」クラス 機能のクラス階層 CountDisplay 「指定回数だけ表示する」という 機能を追加したクラス 具体化の階層 DisplayImpl 「表示する」クラス 具体化の階層 StringDisplayImpl 「文字列を使って表示する」クラス Main Bridge Pattern 4 Display.java (1) public class Display { private DisplayImpl impl; public Display(DisplayImpl impl) { this.impl = impl; } public void open() { impl.rawOpen(); } public void print() { impl.rawPrint(); } Bridge Pattern 5 Display.java (2) public void close() { impl.rawClose(); } public final void display() { open(); print(); close(); } } Bridge Pattern 6 CountDisplay.java 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(); } } Bridge Pattern 7 DisplayImpl.java public abstract class DisplayImpl { public abstract void rawOpen(); public abstract void rawPrint(); public abstract void rawClose(); } Bridge Pattern 8 StringDisplayImpl.java (1) public class StringDisplayImpl extends DisplayImpl { private String string; private int width; public StringDisplayImpl(String string) { this.string = string; this.width = string.getBytes().length; } Bridge Pattern 9 StringDisplayImpl.java (2) public void rawOpen() { printLine(); } public void rawPrint() { System.out.println("|" + string + "|"); } public void rawClose() { printLine(); } Bridge Pattern 10 StringDisplayImpl.java (3) private void printLine() { System.out.print("+"); for (int i = 0; i < width; i++) { System.out.print("-"); } System.out.println("+"); } } Bridge Pattern 11 Main.java public class Main { public static void main(String[] args) { Display d1 = new Display( new StringDisplayImpl("Hello, Japan.")); 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); } Bridge Pattern } 12 実行結果 +-------------+ |Hello, Japan.| +-------------+ +-------------+ |Hello, World.| +-------------+ +----------------+ |Hello, Universe.| +----------------+ +----------------+ |Hello, Universe.| |Hello, Universe.| |Hello, Universe.| |Hello, Universe.| |Hello, Universe.| +----------------+ Bridge Pattern 13 パターン Abstraction impl method1 method2 RefinedAbstraction refinedAbstractionA refinedAbstractionB Implementor implMethodX implMethodY ConcreteImplementor implMethodX implMethodY Bridge Pattern 14
© Copyright 2025 ExpyDoc