オブジェクトを受け取り、それに対して何らかの処理を行うルーチンがあります。オブジェクトは、可変である場合とそうでない場合があります。
void CommandProcessor(ICommand command) {
// do a lot of things
}
同じコマンド インスタンスがプロセッサでループ バックする可能性があります。それが起こると、事態は厄介になります。これらの再訪問者を検出し、処理されないようにしたいと考えています。問題は、オブジェクト自体を邪魔することなく、透過的に行う方法です。
ここに私が試したものがあります
- にプロパティを追加しまし
Boolean Visited {get, set}
たICommand
。
あるモジュールのロジックが他のモジュールに表示されるため、これは好きではありません。ShutdownCommand
簿記ではなく、シャットダウンに関係しています。また、より多くを得ることを期待して、EatIceCreamCommand
常に戻ってくる場合があります。False
一部の変更不可能なオブジェクトには、setter に関する完全な問題があります。
- 処理されたすべてのインスタンスのルックアップ テーブルを非公開で維持します。オブジェクトが最初に来るとき、リストに対してチェックします。
これも好きじゃない。(1) パフォーマンス。ルックアップ テーブルが大きくなります。インスタンスを一致させるには、ライナー検索を行う必要があります。(2)頼りにならないhashcode
。オブジェクトは時々異なるハッシュコードを偽造する可能性があります。(3) オブジェクトをリストに保持すると、オブジェクトがガベージ コレクションされるのを防ぐことができます。
私のコードだけが見ることができる(ICommand の)インスタンスに、目に見えないマーカーを配置する方法が必要です。現在、呼び出しを区別していません。同じインスタンスが戻ってこないことを祈るばかりです。誰かがこの機能を実装するためのより良いアイデアを持っています..?