PR

Observerパターンの事例

2009年5月8日(金)
中川 三千雄

JUnitのTestRunnerクラスとTestResultクラスに関する補足

 今回の事例の中心は、TestRunnerクラスとTestResultクラスでした。Observerパターンに関係する部分に焦点を当てて説明しました。そのため、関係のない部分の説明は割愛しています。実際は図3-1を見てわかるように、もう少し複雑な構成で実装されています。

 TestRunnerクラスは、標準でCUI版とGUI版が用意されています。それぞれBaseTestRunnerクラスのサブクラスであり、BaseTestRunnerクラスはTestListenerインターフェースを実装しています。TestListenerインターフェースはObserverパターンのObserver役になり、BaseTestRunnerクラスのサブクラスはConcreteObserver役になります。一方、TestResultクラスは、ObserverパターンのSubject役であり、ConcreteSubject役でもあります。

 Observerパターンを適用したことで、JUnitの実装に影響を及ぼすことなく、利用環境に応じてCUI版やGUI版のテストランナーやEclipseのJUnitのビューへ、切り替えが簡単にできるのです。また、TesRunnerクラスは、TestResultクラスからユニットテストの実施状況をリアルタイムに通知を受けることができます。それによってTestRunnerクラスは、プログレスバーでテストの実施状況を表示できるのです。

データ(ロジック)とビューの分離

 今回紹介したObserverパターンは、Subject役が複数のObserver役に対してリアルタイムに通知を行うものでした。Observeの本来の意味は「観察」ですが、実際はSubject役より状態変化の通知を受けることで把握しています。Subject役の通知先が固定に決められないときやクラス間の結合度を弱くしたいときに効果を発揮します。Observerパターンは、クラス間のやりとりが一見複雑に見えますが、メソッドの意味や流れを1つ1つ確認していくことで理解できるはずです。

 このほかにObserverパターンは、MVCパターン(Model/View/Controller)を用いたプレゼンテーション・フレームワークでもよく利用されています。MVCパターンは、データやロジックなど表示形式にとらわれないModelと、Modelの持つ情報をどのような形式で表示するか決定するViewにわけて設計/実装を進めていきます。ModelはViewに依存するような実装をしてはいけません。またModelから見てViewは1つ以上存在します。ObserverパターンのSubject役とObserver役に関係が似ていますね。ちなみにMVCパターンは、Observerパターンのような小さなデザインパターンをいくつか組み合わせて実現しているパターンのため、粒度的にもデザインパターンというよりはソフトウエア・アーキテクチャに近いものです。

 次回は、Factory MethodパターンとAdapterパターンの組み合わせの事例を紹介します。それでは、次回をお楽しみに!

【参考文献】
Erich Gamma, Rechard Helm, Ralph Jonson, John Vlissides『オブジェクト指向における再利用のためのデザインパターン』ソフトバンククリエイティブ(発行年:1999)
結城 浩『Java言語で学ぶデザインパターン入門』ソフトバンクパブリッシング(発行年:2001)
Vincent Massol,Ted Husted『JUnitインアクション』ソフトバンクパブリッシング(発行年:2004)
「JUnit.org」(http://www.junit.org/)(アクセス:2009/04)

株式会社オージス総研
株式会社オージス総研アドバンストモデリングソリューション部アーキテクトチーム兼エンタープライズオープンソースセンター所属。これまでに2社の独立系SI企業で経験を積み、現在に至る。オージス総研では、フレームワークの設計/開発や開発プロセス支援など、アーキテクトとしてプロジェクトに参画する。また、オージス総研のコミュニティー「オブジェクトの広場」にも参加している。
オブジェクトの広場 http://www.ogis-ri.co.jp/otc/hiroba/

Think IT会員サービス無料登録受付中

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

他にもこの記事が読まれています