質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

3751閲覧

オブザーバーとは

aaaaaaaa

総合スコア501

デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2016/10/27 10:52

編集2016/10/28 03:00

デザインパターンの一つであるオブザーバーは、通知者と監視者がおり、オブジェクトに何かしらの状態変化が生じたら通知者が通知を行い、
通知を受け取った監視者が必要な処理を行うものと認識しています。
ようは、jqueryなどの処理で見かけるHTML要素(DOM要素)がクリックされたら、という状態変化が起きたら、クリック後に処理を行うオブジェクトに通知を行い、クリック後に行う処理を実行するものだと思っております。

書籍(ブレイクスルーJavaScript)などでオブザーバーを説明する際のソースには、

javascript

1function Observer() { 2 this.listeners = []; 3 } 4 5Observer.prototype.on = function(func) { 6 this.listeners.push(func); 7 }; 8 9Observer.prototype.off = function(func) { 10 var len = this.listener.length; 11 12 for(var i=0;i<len;i++) { 13 var listener = this.listeners[i]; 14 if(listener === func) { 15 this.listeners.splice(i,1); 16 } 17 } 18}; 19 20Observer.prototype.trigger = function(event) { 21 var len = this.listeners.length; 22 23 for(var i=0;i<len;i++) { 24 var listener = this.listeners[i]; 25 listener(); 26 } 27 };

とありますが、上記の認識とソースを持ってもオブサーバーがどのようなものかいまいち理解できないですしピンと来ずぼやけているようです。オブザーバーどのような用途で利用され、オブザーバーというものを噛み砕いて説明するとどのようになりますか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

popobot

2016/10/27 21:22

ここでのオブザーバとは、デザインパターンのObserverパターンのことを指していますか?
ikedas

2016/10/27 23:56

引用は、必要十分な範囲を、出所を明示して、正確に行って下さい。お願いします。
guest

回答2

0

自分はデザインパターンにそれほど精通しているわけでもないし、その書籍を読んだこともありませんが...
そのコードだけをもってObserverパターンを説明しているとするならば、やや不十分だと感じます。

なお、デザインパターンについては、それだけを扱った専門書も多数ありますし、各言語で詳しく実装例が書かれたサイトもありますので、そういったものをまずはよく読まれたらいかがでしょうか。可能であれば、ご自身で実装してみると、十分な理解が得られると思います。

投稿2016/10/30 00:49

popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

大きめの書店へ行って、javaScriptの棚 (その店はある棚一本が丸々javaScript関係でした) に並んでいる本をぱらぱら見てみたところ、Observerパターンを取り上げているものは結構ありました。ただ、デザインパターンのうちこのパターンのみしか取り上げてないものがけっこうあり、そういうのは説明があやしいものが多かったです (たとえば「ObserverパターンはSubscriber-publisherパターンを用いて実装されることが多いが云々」……どっちも同しやろが!!)。また、MVCモデルとの関係を述べたものはあまりなかったです。

質問者さんが読んだという本は実見していませんが、そういう手短かな、結果として意味不明な解説になっているものではないかと思います。実際、ご質問に挙げられているコードは、GoFの本[1]の説明でのObserverパターンに現れる2つの抽象クラスと2つの具象クラス (したがって2つ以上のインスタンス) のうち、Subjectクラスの実装にあたる部分にすぎません。また同書では、同じ効果をObserverクラスでの実装でも、なにかグローバルなテーブルのようなものでの実装でも実現できる、ということも示唆しています。

そういうわけで、Observerなる「クラス」を作って「これがオブザーバーだ」と説明しても、読む人に意味がわからないのは当然だと思います。

質問者さんの読んだ本は役に立たない、と言いたいわけではないです。「デザインパターン」というキーワードを知る機会を与えてくれたのですから。深く知りたければほかの本も探して読めばいいです (というか、その本には参考図書の紹介などはないんでしょうか)。

また、デザインパターンは観念論ではなく、実際のコーディングや開発プロセスに役立てることを目的としているので、コードを書くことで理解しやすくなると思います。日々コードを書く中で、デザインパターンを意識してみられるといいと思います。

以上、質問者さんが知りたかったことが何なのかよくわかっていないのですが、なにか参考にでもなれば。


[1] 回答中の「GoFの本」とは次の書籍のことを指して言っています。

為念。これを読めということではないです。

投稿2016/11/03 02:47

編集2016/11/03 02:50
ikedas

総合スコア4333

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問