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

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
復習ー I (General Review I) クラスとオブジェクトの概念 Concepts of class and object クラスの宣言とオブジェクトの生成 Definition of a class and creation of an object コンストラクタとメソッドのオーバーロー.
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
プログラミング第5回 1 while ループ 文字列の操作
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
社会人学習講座 「Javaプログラミング概論」
アルゴリズムとデータ構造 2012年6月27日
Applet 岡部 祐典 鈴木 敬幸.
WebサービスII (第10回) 2007年11月28日 植田龍男.
アルゴリズムとプログラミング (Algorithms and Programming)
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
独習Java ・ 10.6  Hashtableクラス ・ 10.7  String Tokenizerクラス  12月12日    小笠原 一恵.
String - 文字列 2009年10月9日 7ADD2116 佐藤洋輔.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
アルゴリズムとプログラミング (Algorithms and Programming)
WebサービスII (第8回) 2007年11月14日 植田龍男.
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
第20章 Flyweight ~同じものを共有して無駄をなくす~
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
オブジェクト指向入門.
アルゴリズムとデータ構造 2011年6月20日
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
~手続き指向からオブジェクト指向へ[Ⅱ]~
第11回 アプリケーションの構成 ~CUI自動販売機の完成!~.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
変数のスコープ クラス クラス変数 すべてのメソッドの外側でstaticで定義
ソフトウェア工学 知能情報学部 新田直也.
プログラミング言語入門 手続き型言語としてのJava
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
UDPマルチキャストチャット                    空川幸司.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
第7回独習Javaゼミ セクション 1~4 発表者 直江 宗紀.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
第6回 2007年6月1日 応用Java (Java/XML).
第11週:super/subクラス、継承性、メソッド再定義
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
暗号技術 ~JAVAプログラム①~ (5週目)
Collection, Generics, Iterator
11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS.
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2011年6月23日
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2012年7月2日
C#プログラミング実習 第3回.
アルゴリズムとプログラミング (Algorithms and Programming)
アルゴリズムとデータ構造 2011年6月28日
ソフトウェア制作論 平成30年11月28日.
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
アルゴリズムとデータ構造 2013年7月2日
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
アルゴリズムとデータ構造 2012年6月25日
JAVA入門⑥ クラスとインスタンス.
アルゴリズムとデータ構造 2012年6月21日
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

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

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