Mediator パターンに精通している方は...
Delphi で Mediator パターンを実装したいのですが、Delphi コンパイラは必要な循環参照を処理できません。
「デザイン パターン」の元の GOF ダイアグラムを見ると、Mediator は各 Colleague への参照を持っていますが、Colleague オブジェクトの多くは Mediator への参照を持っています。
これはほとんどの言語では問題になりませんが、Delphi コンパイラから「F2047 Circular unit reference to ...」というメッセージが表示されます。
インターフェイスを使用したこのアプローチは役に立ちますか? (複雑そうです)
Delphi 2010 を使用しています
【ソリューションの概要】
受け入れられた回答を要約すると、循環参照を許可する言語では、抽象的な Mediator クラスを省略できます (278 ページの GoF の「実装」セクションで説明されているように)。抽象 Mediator クラスを使用せずに Delphi で Mediator を実装できる唯一の方法は、すべてのクラスを 1 つの Unit に含めることです。
それ以外の場合は、具体的なサブクラスに加えて、追加の抽象 Mediator 基本クラスが必要です。
3 つのユニットの Uses 句は次のようになります。
ConcreteColleage1は Mediator
を使用 ConcreteMediator は Mediator を使用、ConcreateColleague1
は Mediator (どちらも使用しない)
循環参照禁止!