2

階層関係を持つシステムを設計する際に、多態的な動作を必要とする問題に遭遇することがよくありますが、この多態的な実装の恩恵を受ける作業の種類は複数あります。

たとえば、抽象構文ツリーを使用してコンパイル用に解析されたソースを編成するコンパイラを考えてみましょう。複数のタイプの ValueProvider があり、それぞれが操作スタックに値をロードするための異なるコードの発行を担当する場合があるため、ロジックを多態的に編成すると便利です。問題は、AST で静的分析を実行したい場合があることです。この場合、ツリーでまったく異なる作業を行いたいのですが、それでも分析対象のノードのタイプに依存する動作が発生する可能性があります。つまり、ポリモーフィックな動作が必要ですが、分析コードをコンパイル コードと混ぜ合わせたくはありません。

私が現在これに取り組んでいる方法は、単にツリーを提供する責任を持つオブジェクト モデルを使用してデータを格納することです。次に、ツリーの各コンシューマー (コンパイラーや静的アナライザーなど) は、実行時の型情報を使用して、そのロジックの条件付き分岐を実行します。これは必然的に、ノードのタイプに基づいて、多くの「if/else if」または「switch」コーディングにつながります。ポリモーフィズムが対処するように設計されているのは、この種の厄介な分岐だけですが、並列でバラバラな責任にはそれが必要なようです。

これを構造化するより良い方法はありますか?

4

1 に答える 1

4

ビジターパターンを探しているようです:

ビジターデザインパターンは、アルゴリズムを操作対象のオブジェクト構造から分離する方法です。この分離の実際的な結果は、既存のオブジェクト構造を変更せずに、それらの構造に新しい操作を追加できることです。

(強調鉱山)

于 2012-05-14T15:43:36.400 に答える