次のコンポーネントがあるとします。
- Producer は数値を生成し、Consumer にメッセージを送信します
- Producer と Consumer の両方が Monitor にメッセージを送信します
- モニターは、たとえばランダムに、生成/消費プロセスをいつ停止するかを決定し、メッセージをストッパーに送信します
- ストッパーはプロデューサーとコンシューマーの両方をきれいに停止します
これは、Java などの可変言語で簡単に実現できます。here で説明されているように、インターフェースで部分的な可変性を許可することでこれを解決できることも知っています。
ただし、可能であっても循環依存関係を持つことはお勧めできません。したがって、すべての参照がコンストラクターによって注入され、最終的なものであると仮定しましょう。
- プロデューサーは
final Consumer
、final Monitor
- 消費者が持っている
final Monitor
- モニターは
final Stopper
- ストッパーが
final Producer
あり、final Consumer
thisなどの参考文献を見つけましたが、適用されないようです。
このケースと、このような一般的なケースのサイクルを解除するにはどうすればよいでしょうか? つまり、どうすればサイクルを形成しないようにデザインできるかということに一番興味があります。ヒントはありますか?