web-dev-qa-db-ja.com

コールバックメカニズムを扱うデザインパターンはありますか?

コールバックメカニズムを扱うデザインパターンはありますか?

25
user53670

それは オブザーバーパターン -ウィキペディアから

オブザーバーパターン(非同期パブリッシュ/サブスクライブパターンのサブセット)は、サブジェクトと呼ばれるオブジェクトがオブザーバーと呼ばれる依存関係のリストを維持し、通常はを呼び出すことによって状態の変化を自動的に通知するソフトウェアデザインパターンです。それらの方法の1つ。これは主に、分散イベント処理システムを実装するために使用されます。

22
Jose Basilio

コールバックの使用方法によって異なります。

デザインパターンとは、意図を伝えることです。

1つ以上のコールバックの登録を許可し、それらを「将来のある時点で」通知として呼び出すことができる場合は、オブザーバーについて話していることになります。また、この場合のコールバックの実際の呼び出しは、通常「オプション」であるか、何らかの刺激に基づいてトリガーされます。 (コールバックは呼び出される場合と呼び出されない場合があります)

「やるべきこと」を渡すつもりで、それがメソッドで行われる(または後のプロセスで「何かをする」ために使用される)場合は、戦略について話していることになります。また、実際の呼び出しは通常発生します。

まったく同じコードがどちらかである可能性があることに注意してください。実際には、問題についてどのように考えているか、他の人にどのように考えてもらいたいかが重要です。

16

コールバックフォームです戦略デザインパターン

8
dfa

いくつか。チェックアウト http://people.bu.edu/azs/teaching/cs108/2006fall/callback_pattern.pdf 、および以下:

最も適切なのは状況によって異なります。どのプログラミング言語を使用し、正確に何をしたいですか?

7
acromm

外部ポリモーフィズム -オブジェクトには、別のオブジェクトへの参照と、そのオブジェクトを呼び出す関数があります。単一のタイプとして表示できるため、オブジェクトと関数を組み合わせて、イベントを呼び出すことができます。代表者はこのパターンの例です。これは、C#スタイルのアプローチです。

オブザーバーパターン-オブジェクトが実装できるインターフェイス/基本クラスを使用し、このインターフェイスをイベントに登録します。 Javaスタイルのアプローチの詳細。

デリゲート/外部ポリモーフィズムのC++ソリューションについては、ここに投稿した回答を確認してください: バインドされたメソッドからの生の関数ポインター

4
Chap

適切なパターンの説明は サービスコールバックデザインパターン です。これはSOAパターンのカタログの一部ですが、説明されているパターンは、SOAサービスではない汎用コンポーネントで使用できます。

もう1つの関連パターンは、HohpeとWoolfによる古典的な本「EnterpriseIntegrationPatterns」で説明されている Return Address pattern です。

Josuttisは、彼の著書「SOAinPractice」でコールバックについても語っています。彼はそれを リクエスト/コールバックメッセージ交換パターン と呼んでいます。

1
Paulo Merson

あなたの質問は非常に一般的であり、私が考えることができる最も一般的な答えは、コールバックを必要とする問題があるときにポリモーフィズムを使用することです。

ポリモーフィズムを使用すると、コールバックの使用方法に関するインターフェイス(または抽象クラス)の形式でソフトウェアコントラクトを指定できます。その後、クライアントは、目的に適していると思われるインターフェイスの実装を自由に選択できます。

状態、戦略、オブザーバーパターン、またはまったく異なるものを使用することが推奨されるかどうかは、実際には状況によって異なります。

1
Tobias

オブザーバーパターンが思い浮かびます。

1つのオブジェクト(サブスクライバー)が別のオブジェクト(パブリッシャー)にサブスクライブできます。出版社が変更または更新されると、すべての購読者に通知できます。

使用している言語に応じて、通知時に呼び出す必要のある関数を指定できます。

http://en.wikipedia.org/wiki/Observer_pattern

デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素[Gang of Four] で詳しく説明されています。

0
GuiSim

Observerパターンに関する他のポスターにも同意します。この目的のために特別に設計されています。

0
Ranjith