アプリ版:「スタンプのみでお礼する」機能のリリースについて

observerパターンについて勉強中です。下のサイトを参考にしています

http://www.fuka.info.waseda.ac.jp/~washi/m_html/ …

もしVectorを使って、データを挿入し(更新し)、それをobserverに通知したいという場合はたとえばどのようにconcreteSubjectクラスはかけるのでしょうか。

subjectStateを訳すとデータの状態?なので、subjectStateを具体的にデータを保持するVectorオブジェクトの参照変数とするのべきなのでしょうか?

http://www.hellohiro.com/pattern/observer.htm

こちらのサイトでは型がStringで、"NEW"といったような文字をセットしたりしていますが、そういうデータの状態を表す指標(Vectorなら要素数とか?)をsbjectStateに入れておくべきで、データ本体は別のフィールドとして持たせるということなのでしょうか・・・?

自分で言っていてもなんかあほらしい質問なのですが、どうもこのクラス図の見方になれていないので、アドバイスをいただければと思います。

A 回答 (2件)

#1です。



>subjectStateを訳すとデータの状態?なので、
>subjectStateを具体的にデータを保持するVectorオブジェクトの
>参照変数とするのべきなのでしょうか?

>そういうデータの状態を表す指標(Vectorなら要素数とか?)を
>sbjectStateに入れておくべきで、データ本体は別のフィールドとして
>持たせるということなのでしょうか・・・?


getState()というのは、「観察対象のデータを取得するメソッド」なので、
「getState()で何を返すべきか」は、
「そもそも何を観察したかったのか」ということだと思う。

Vectorそのものを観察したかったのなら、Vectorそのものを返せばよいし、
重要機密書類を観察したかったのなら、重要機密書類を返せばよい。

---
getState()というのは単に、
(その「観察したかった」データへの)アクセス手段でしかない。

だから、そんな「アクセス手段」をいくつだけ、どこに、どのように用意するかは、
自由。(Observerパターンの規定する範疇ではない。)
「用意したければ、用意する」という感じ、と言ってもいいかも。

…と思う。

---
参考URL
http://www.objectclub.jp/technicaldoc/pattern/eDWP
の「複数の通知先」「Observerパターン」
「内容の通知 - Push型/Pull型のObserverパターン」

参考URL:http://www.objectclub.jp/technicaldoc/pattern/eDWP
    • good
    • 0

>Vectorを使って、データを挿入し(更新し)、


>それをobserverに通知したいという場合はたとえばどのように
>concreteSubjectクラスはかけるのでしょうか。


「Observerパターンとして」は、
「観察者に見せるデータ」は、「何でもいい」と思う。

private Vector subjectState;
/*Vectorそのものを返す*/
public Vector getVector(){
 return subjectState;
}

または

/*要素を返す*/
public MyData getElement(int index){
 return (MyData)subjectState.elementAt(index);
}
/*要素数を返す*/
public int getSize(){
 return subjectState.size();
}

のように「2本立て」にしても、構わないと思う。
ようは観察者側で「Vector内部の全要素が見られれば」それで十分なわけだから。

---

どっちがいいか、どれがいいかは、
デザインパターンとはまた別の話になると思う。
たとえば観察者にVectorを見せてしまえば、
観察者側からVectorを操作(add()やremove())される可能性が出てくる。
…と思う。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!