« 3日間記事が作成できなかったのは・・・ | トップページ | 拡張ポイントの自作(2) »

2004.01.29

拡張ポイントの自作(1)

PropertyListenerやActionListenerに代表されるリスナーという仕組みはJavaの世界の中で数多く使われている。これはデザインパターン的にはObserverパターンであり,ある対象について,それぞれ異なる複数の観測者を動的に登録する仕組みである。ある対象は,予め定められたプロトコル(インタフェース)に則った観測者に対して通知を行うことができ,逆に言うと,ある対象は個々の観測者を全く知らなくてよい(プロトコルしか相手にしないから)。

拡張性という点ではObserverパターンも非常に強力な仕組みだが,Eclipseプラットフォームではプラグインという拡張機構を獲得するために,より強力な拡張機構を備えている。それが拡張ポイント(Extension-Point)だ。Observerパターンでは,被観測者に対して観測者を登録する作業はプログラム上で記述されるが,EclipseではXMLファイル(プラグイン・マニフェスト)により記述される。

具体的に見ていこう。まず,被観測者,つまり拡張ポイントの定義は,あるプラグイン・マニフェスト内で以下のように定義される。

  <plugin id="yoichiro.subject" ...>
    <extension-point
      id="observers"
      name="Test Observers"/>
  </plugin>

extension-point要素を使うことにより,拡張ポイントを自作することができる。通常拡張ポイントを指定するときには,「org.eclipse.ui.views」などのような感じになるが,extension-point要素のid属性では「observers」と短い名前になっている。実は拡張ポイントのIDは「プラグインID+拡張ポイントID」であり,上記では「yoichiro.subject.observers」という拡張ポイントになるのだ。name属性は,適当に名前をつけよう。

さらにschema属性を使って,extension要素の子要素の構造を規定することができるが,それは必須ではない。ここでは,observer要素をextension要素の子要素として持ち,それが持つclass属性により観測者の具象クラスが指定される,と仮定する。

次に,観測者が実装しなければならないプロトコル,つまりインタフェースを規定する。

  package yoichiro.subject;
  public interface IObserver {
    public void update();
  }

((2)に続く。。。)

|

« 3日間記事が作成できなかったのは・・・ | トップページ | 拡張ポイントの自作(2) »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/12631/147972

この記事へのトラックバック一覧です: 拡張ポイントの自作(1):

« 3日間記事が作成できなかったのは・・・ | トップページ | 拡張ポイントの自作(2) »