[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] MVCと『Javaオブジェクト設計』第5章



『Peter Coadによる Javaオブジェクト設計』を読む会 第1回のときに出た
 MVC の話題の話題の続きです。

青柳龍也さんの『Java API プログラミングガイド』に、
「Observable/Observer は、SmallTalk では Model/View と呼ばれます」
という意味の記述がありました。

私は、
「じゃあControlerはどこにあるんだろう」
と言うのがずっと分からなかったです。

この話しを読書会の時にしたところ、
「Obsrevable には Model と Controler が共に含まれているのでは」
という意見がありました。

『Peter Coadによる Javaオブジェクト設計』第5章「通知を使った設計」にあった、

public interface IObserver {
  public void update(Object source, Object changecode);
}

public interface IObservable {
  public void addIObserver(IObserver aObserser);
  public void deleteIObserver(IObserver aObserver);
  public void deleteIObserver(IObserver aObserver);
}

public class ObserveableComponent extends Objcet {
  private Vector observers = new Vector();

  public void addIObserver(IObserver aObserver) {
    observers.addElement(aObserver);
  }

  public void deleteIObserver(IObserver aObserver) {
    observers.removeElement(aObserver);
  }

  public void deleteIObservers() {
    observers.removeAllElements();
  }

  public void notifyIObservers(Object source, Object changecode) {
    Enumlation e = observers.elements();
    while `(e.hasMoreElements()) {
      IObserver o = (IObserver)e.nextElement();
      o.update(source, changecode);
    }
  }
}

これらをそれぞれ、

  IObserver           ==> IView
  IObservable         ==> IModel
  ObservableComponent ==> Controler

という名前に変えてコーディングしてみました。

public interface IView {
  public void update(Object o, Object change);
}

public interface IModel {
  public void addIView(IView view);
  public void deleteIView(IView view);
  public void deleteIViews();
}

public class Controler {
  private Vector views = new Vector();
  
  public synchronized void addIView(IView view) {
    this.views.addElement(view);
  }

  public synchronized void deleteIView(IView view) {
    this.views.removeElement(view);
  }

  public synchronized void deleteIViews() {
    this.views.removeAllElements();
  }
  
  public synchronized void notifyIViews(Object o, Object change) {
    Enumeration e = this.views.elements();
    while (e.hasMoreElements()) {
      IView v = (IView)e.nextElement();
      v.update(o, change);
    }
  }
}

なんだか頭がすっきりしたような気がします。^^;
------------------------------------------------------------------
遠藤靖之 (えんどう やすゆき) <yasuyuki@xxxxxxxxxx>
http://www.freepage.total.co.jp/jfriends/ (Java互助会ホームページ)
株式会社タイムインターメディア 情報通信サービス部 TEL 03-5362-9009
〒162-0065 新宿区住吉町3-11 新宿スパイアビル8F    FAX 03-5362-9008