Presentation is loading. Please wait.

Presentation is loading. Please wait.

Bridge Pattern http://www.k.hosei.ac.jp/~yukita/.

Similar presentations


Presentation on theme: "Bridge Pattern http://www.k.hosei.ac.jp/~yukita/."— Presentation transcript:

1 Bridge Pattern

2 Bridge パターンの目的 機能のクラス階層と具体化レベル(抽象化)のクラス階層を直行させる。
具体化レベルは2階層だけのことが多い。この場合,「実装の切り替え」と言ったほうが分かりやすい。 Bridge Pattern

3 例題のクラス図 Display impl open print close display DisplayImpl rawOpen
rawPrint rawClose CountDisplay multiDisplay StringDisplayImpl rawOpen rawPrint rawClose Bridge Pattern

4 クラス一覧 Bridgeのどちら 名前 説明 機能のクラス階層 Display 「表示する」クラス CountDisplay
「指定回数だけ表示する」という機能を追加したクラス 具体化の階層 DisplayImpl StringDisplayImpl 「文字列を使って表示する」クラス Main Bridge Pattern

5 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

6 Display.java (2) public void close() { impl.rawClose(); }
public final void display() { open(); print(); close(); Bridge Pattern

7 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

8 DisplayImpl.java public abstract class DisplayImpl {
public abstract void rawOpen(); public abstract void rawPrint(); public abstract void rawClose(); } Bridge Pattern

9 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

10 StringDisplayImpl.java (2)
public void rawOpen() { printLine(); } public void rawPrint() { System.out.println("|" + string + "|"); public void rawClose() { Bridge Pattern

11 StringDisplayImpl.java (3)
private void printLine() { System.out.print("+"); for (int i = 0; i < width; i++) { System.out.print("-"); } System.out.println("+"); Bridge Pattern

12 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

13 実行結果 +-------------+ |Hello, Japan.| |Hello, World.|
|Hello, Universe.| Bridge Pattern

14 パターン Abstraction impl method1 method2 Implementor implMethodX
implMethodY RefinedAbstraction refinedAbstractionA refinedAbstractionB ConcreteImplementor implMethodX implMethodY Bridge Pattern


Download ppt "Bridge Pattern http://www.k.hosei.ac.jp/~yukita/."

Similar presentations


Ads by Google