オブザーバー パターンを使用すると、そのクラス ダイアグラムに基づいて、SUBJECT が OBSERVER への参照を使用することがわかります。一方、OBSERVER は、自身を登録または削除するために SUBJECT への参照を持っています。
これは「循環参照」ですか?
オブザーバー パターンを使用すると、そのクラス ダイアグラムに基づいて、SUBJECT が OBSERVER への参照を使用することがわかります。一方、OBSERVER は、自身を登録または削除するために SUBJECT への参照を持っています。
これは「循環参照」ですか?
確かに、それは循環参照です。これは、参照のグラフのサイクルです。
「循環参照」という用語は、より有害なことについて話すときに使用されることがあります。特に、循環依存関係がある場合(たとえば、A をコンパイルするには B が必要ですが、B をコンパイルするには A が必要です)。
循環参照自体は有害ではありません (例: 循環リンクリスト)。
あなたがそれを説明するように、それは循環参照の場合です。ただし、完全なパターンでObserver
は、は抽象クラス/インターフェースであり、1つ以上の具体的な実装があることに注意してください。Observer
一部のバリエーションでは(そのサブクラスがそれを参照する場合がありますが)何も知りませんがSubject
、他のバリエーションでは、インターフェイスに依存するObservable
か、直接に依存する場合がありますSubject
。ただし、具体的なサブクラスではなく、Subject
についてのみ知っています。Observer
したがって、参照は(必然的に)循環的ではありません。