Download presentation
Presentation is loading. Please wait.
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
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.