を得ることなく、DelphiでMediatorパターンの実装が、Delphiコンパイラは、循環参照を扱うことができません必須。は <p></p>が、私はDelphiでMediatorパターンを実装したい...循環参照
「デザインパターン」の元のGOF図を見ると、メディエータには各同僚の参照がありますが、同僚のオブジェクトの多くにはメディエータへの参照があります。
これは、ほとんどの言語では問題ではありませんが、私のDelphiコンパイラは、任意の使用可能、インターフェースを使用して、私に
うthis approach「へ... F2047循環ユニットの参照」を与えていますか?循環参照を許可する言語では、あなたが抽象メディエータクラスを省略することができます。
私は、Delphi 2010
[ソリューションの概要]
だけ受け入れ答えを要約するを使用しています(複雑なようです)(GoFの「実装」セクション(278ページ)を参照)。 抽象MediatorクラスなしでMediatorをDelphiで実装できる唯一の方法は、すべてのクラスを1つのユニットにまとめることです。。
それ以外の場合は、具体的なサブクラスに加えて、追加の抽象的なMediator基本クラスが必要です。 3つのユニットのための
あなたのuses句は次のようになります。
ConcreteColleage1はメディエータ
ConcreteMediatorはメディエータ、ConcreateColleague1
メディエータ(どちらか使用しません)
ない循環参照を使用し使用します!
私は、GoFのDesign Patternsの書籍に記載されているMediatorパターンを参照しています。具体的には、274ページの図を参照してください。 'aButton'は 'aFontDialogDirector'への参照を持ち、逆に 'aFontDialogDirector'は 'aButton'への参照を持ちます。したがって、Delphiでは、これらの2つのクラスは同じUnit内になければなりません。 – awmross
あなたの答えをもっと慎重に読んだら、今私はこれが正しいことを見ています。 1つのユニットに基本メディエータクラスを作成し、それを別のユニットにサブクラス化する必要があります。あなたの答えを編集する場合、私はdownvoteをupvoteに変更することができます:-) – awmross