- ベストアンサー
observerパターンとは?データの状態を通知する方法
- observerパターンとは、デザインパターンの一種であり、オブジェクト間の依存関係を解消するために使われます。
- 具体的には、あるオブジェクトが変化したときに、それに関連する他のオブジェクトに通知する仕組みを提供します。
- 例えば、Vectorを使ってデータを挿入・更新し、それをobserverに通知する場合、concreteSubjectクラスでデータの状態を保持し、observerに変更を通知します。
- みんなの回答 (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パターン」
その他の回答 (1)
- kacchann
- ベストアンサー率58% (347/594)
>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())される可能性が出てくる。 …と思う。