問題タブ [observer-pattern]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - ASP.NET MVCでのアプリケーションの使用に関する統計情報を収集するにはどうすればよいですか?
PageViews、各ユーザーのコメント数などの統計情報を収集したいのですが、オブザーバーパターンの使用を考えました。これをASP.NETMVCにどのように実装しますか?
objective-c - いつオブザーバーを削除する必要がありますか? オブザーバーを削除する前のオブジェクトの割り当て解除に関するエラー
クラスの 1 つでキー値監視を使用しようとしています。init メソッドでオブザーバーを登録し、dealloc でそれらを削除/登録解除しましたが、デバッグ プリントによると、dealloc メソッドが呼び出される前に次のエラーが発生したようです。
クラス TekkPoint のインスタンス 0x583870 の割り当てが解除されていますが、キー値オブザーバーがまだ登録されています。観測情報が漏洩しており、誤って別の天体にくっついてしまう可能性さえあります。NSKVODeallocateBreak にブレークポイントを設定して、デバッガーでここで停止します。現在の観測情報は次のとおりです: (コンテキスト: 0x0、プロパティ: 0x536400> コンテキスト: 0x0、プロパティ: 0x55aba0> )
オブザーバーを削除する特定の方法はありますか? それとも、それらを削除する必要がある特定の場所ですか?
この質問によると、私は正しいことをしていますが、なぜこのエラーメッセージが表示されるのでしょうか?
これが私のdeallocルーチンです:
私の実装で奇妙なことに注意すべきことの 1 つは、オブザーバーをオブザーバーに追加したり、オブザービーから削除したりしていることです。これにより、問題が発生する可能性がありますか?
c++ - 「オブザーバー」パターンの実装に関する問題
C++ と STL を使用して Observer パターンを実装しているときに、興味深い問題に遭遇しました。この古典的な例を考えてみましょう:
この例は、デザイン パターンに関するすべての本に記載されています。残念ながら、実際のシステムはもっと複雑なので、ここに最初の問題があります。一部のオブザーバーは、通知を受けると、サブジェクトに他のオブザーバーを追加することを決定します。これにより、使用する「for」ループとすべての反復子が無効になります。解決策はかなり簡単です。登録されたオブザーバー リストのスナップショットを作成し、スナップショットを反復処理します。新しいオブザーバーを追加してもスナップショットは無効にならないため、すべて問題ないようです。しかし、ここで別の問題が発生します。オブザーバーは、通知を受けると自分自身を破壊することを決定します。さらに悪いことに、1 つのオブザーバーが他のすべてのオブザーバーを破棄することを決定でき (それらはスクリプトから制御されます)、キューとスナップショットの両方が無効になります。割り当て解除されたポインターを繰り返し処理していることに気づきました。
私の質問は、オブザーバーが互いに殺し合う状況をどのように処理すればよいですか? すぐに使えるパターンはありますか? 「オブザーバー」は世界で最も簡単なデザインパターンだとずっと思っていましたが、今ではそれを正しく実装するのはそれほど簡単ではないようです...
皆様、ご興味をお持ちいただきありがとうございます。決定の要約を見てみましょう。
[1]「やらないで」申し訳ありませんが、必須です。オブザーバーはスクリプトから制御され、ガベージ コレクションされます。ガベージ コレクションを制御して割り当て解除を防ぐことはできません。
[2] "boost::signal を使用する"最も有望な決定ですが、プロジェクトに boost を導入することはできません。そのような決定は、プロジェクト リーダーのみが行う必要があります (私たちは Playstation で書いています)。
[3] 「shared__ptr を使用する」これにより、オブザーバーの割り当て解除が防止されます。一部のサブシステムはメモリ プールのクリーンアップに依存している可能性があるため、shared_ptr を使用できないと思います。
[4] 「オブザーバーの割り当て解除を延期する」通知中にオブザーバーを削除するためにキューに入れ、2 番目のサイクルを使用してそれらを削除します。残念ながら、割り当て解除を防ぐことはできないため、オブザーバーをある種の「アダプター」でラップし、実際には「アダプター」のリストを保持するというトリックを使用します。デストラクタでは、オブザーバがアダプタから割り当てを解除し、2 番目のサイクルで空のアダプタを破棄します。
ps 質問を編集してすべての投稿を要約してもよろしいですか? 私はStackOverflowの初心者です...
c# - デリゲートを使用してC#で実装されたオブザーバーパターン?
C# では、イベントを使用してオブザーバー パターンが既に実装されていませんか?という質問が既に回答されています。
イベントを使用して、オブザーバー パターンが c# で既に実装されているかどうかを尋ねます。
イベントとオブザーバーのパターンを取得しましたが、オブザーバーのパターンは本当に単なるデリゲートであり、イベントはさらなる実装ではありませんか?
java - プロセッサをピーキングする方法
私は狂ったように実行されているメソッド isReset() を持っています。私はそれを次のように定義しました
別のクラスで。以下のクラスは、このコードを使用する唯一のクラスです。
language-agnostic - 複数のイベントに対するリスナーの設計
私は標準的なリスナーに精通しています。ジャワで。たとえば、オブジェクトのコレクションがある場合、CreateListener、ChangeListener、DeleteListener など、さまざまなものの一連のリスナーをサポートできます。それぞれに、影響を受けるオブジェクトのリストが渡されるメソッド (objectChange など) が 1 つあります。このコレクションを使用するアプリは、リスナーを実装して登録することにより、これらの 1 つ以上に関心を登録できます。コレクション内のオブジェクトに何かが起こると、適切なリスナーが呼び出されます。
しかし、これらのイベントの種類が多数あり、おそらく似ているが多少異なる場合はどうなるでしょうか。代わりに、多くのメソッドを持つ 1 つのリスナー クラスを定義することは理にかなっていますか。例えば:
これにより、これらのイベントの多くに登録したいアプリにとって簡単になるようです。アプリは、それぞれが 1 つのメソッドのみを実装する多くのクラスを定義するのではなく、1 つのクラスに多くのメソッドを実装します。欠点や他の提案はありますか?
明確化の編集:(休日に気を取られて申し訳ありません。これが別の投稿であるべきかどうかはわかりませんが、これをフォローアップするのは理にかなっているようです)
クライアント アプリが使用するフレームワークとして、このコードが複数の言語で実装されることを指定する必要がありました。C++ の場合、複数のインターフェイスを実装するのは困難です。
スーパーセット抽象リスナーは、メソッドごとに何もしないデフォルトの実装を提供できるため、それを拡張するクライアントは、関心のあるものをオーバーライドするだけで済みます。このアプローチでは、後で追加のメソッドを抽象クラスに追加することを決定でき、既存のクライアントは問題ありません (必要に応じて、それらの新しいメソッドをオーバーライドできます)。また、(アプリが 1 つまたは複数を呼び出す) 多数の登録方法の代替ではなく、1 回の呼び出しで 1 つの登録のみが必要です。
この明確化により、スーパーセット抽象クラスは個々の抽象クラスよりも意味がありますか?
java - OOP でのボタン リスナーの追加/登録のスタイル (Java、Actionscript など)
UI にボタン リスナーを追加するときに、2 つの異なるスタイルに遭遇しました。例として SWT を使用します。それにもかかわらず、J2ME、Flash Actionscript でも同様のコードを見ました。
スタイル 1:
スタイル 2:
個人的には、マウス イベントを一元的に処理できる 2 番目のスタイルを好みます。どのスタイルが好きですか? なぜ?
java - Javaのオブザーバーパターンとジェネリックに関する問題
ジェネリックのObserverインターフェースとObservableクラスを作成しましたが、ジェネリックの問題のためにクラスをコンパイルできません。なぜ私がやろうとしていることが禁じられているのか正確にはわかりません。コードは次のとおりです。
soa - 最優秀パブリッシュ/サブスクライブ「ミドルウェア」
私は、優れたオープン ソース ネットワーク ベースの Pub/Sub (オブザーバー パターン) ライブラリを探しています。気に入ったものが見つかりませんでした:
JMS - Java に関連付けられており、メッセージの内容をダム バイナリ BLOB として扱います
NDDS - $$、IDL の使用
CORBA/ICE - Pub/Sub は RPC の上に構築され、CORBA API は直感的ではありません
JBOSS/ESB - あまり詳しくない
そのようなパッケージが次のことができればいいのですが:
ネットワークベース
ペイロード データを認識しているため、ユーザーはエンディアン/シリアライゼーションの問題を心配する必要はありません。
多言語サポート (C++、ruby、Java、python がいいでしょう)
自動生成コードなし (IDL なし!)
直感的なサブスクリプション/トピック管理
楽しみのために、私は自分自身を作成しました。考え?