1

今、私はオブザーバブル/オブザーバブルのパターンに出くわしました。オブザーバブルはすべてのオブザーバーに通知します。Observerはすべて、ObservableがObservableを拡張している間、インターフェースObserverを実装します。インターフェースに関する知識のギャップを埋めようとしていると思います。抽象クラスのポイントとその仕組みは理解していますが、インターフェースには注意が必要です。インターフェイスの場合、それらがテンプレートとして機能することを理解しています。テンプレートを実装する場合は、インターフェイスからすべてのメソッドを追加する必要があります。これは純粋にあなたのプロジェクトの組織的な助けのためだと思いました。

ただし、このObserver / Observableの場合、Observerを実装するオブジェクトでupdate()関数がどのように呼び出されているのかわかりません。Observableへの唯一のリンクは、addObserver()を呼び出してオブザーバーを追加し、他のオブザーバーが追加されたリストにそれを格納する必要があることです。しかしその後、update()は各オブザーバーでどのように呼び出されますか?Observableは、オブザーバーのリストを1つずつ確認し、setChanged()を呼び出してからnotifyObservers()を呼び出したらobserver.update()を呼び出しますか?これは理にかなっていますが、実装は私が思っていたよりも隠されています。

私はこれをオブザーバーパターンのコンテキストに入れましたが、実際には何にでも当てはまります。ほとんどすべてのイベントベースのものがインターフェースを使用していることに気づきました。これは、オブジェクトが次に呼び出される関数を持つことが保証されているためですか?

4

2 に答える 2

3

抽象クラスのポイントとその仕組みを理解しています

そうすれば、インターフェースを理解する方法の95%になります。インターフェイスに具体的なメソッドの実装を含めることができないことを除けば、インターフェイスは抽象クラスとほとんど同じです。

これは、オブジェクトが次に呼び出される関数を持つことが保証されているためですか?

はい、その通りです。

于 2012-06-19T15:04:50.007 に答える
2

はい。インターフェイスはコントラクトを定義します。インターフェイスを実装するすべてのクラスは、このコントラクトに従わなければなりません。Observableを監視する場合は、Observerのコントラクトに従うだけです。Observerインターフェイスを実装して、Observableから呼び出すことができる更新メソッドを用意します。

オブザーバブルの具体的なタイプは、オブザーバブルには関係ありません。インターフェイスを使用すると、Observerインターフェイスを実装している限り、あらゆる種類のオブジェクトがObservableを監視できるため、非常に便利です。Observableを監視するために、特定の具象タイプを使用したり、特定のクラスを拡張したりする必要はありません。

于 2012-06-19T15:08:58.987 に答える