訪問者パターンに関連する他の質問を調べていましたが、訪問者パターンでの二重ディスパッチの実装を理解できませんでした。
リンクを参照してください ビジターパターン
訪問者パターンで二重ディスパッチはどのように機能しますか?
訪問者パターンに関連する他の質問を調べていましたが、訪問者パターンでの二重ディスパッチの実装を理解できませんでした。
リンクを参照してください ビジターパターン
訪問者パターンで二重ディスパッチはどのように機能しますか?
単発発送

Node がインターフェイス クラスであり、2 つのサブクラスがインターフェイスの具象実装であるとします。
ノード インスタンスでメソッドを呼び出す場合GenerateCode()、実行される実際の操作はノードのタイプによって異なります。VariableRefNodeまたはのいずれかのメソッドである可能性がありますAssignmentNode。と呼んでも同じですPrettyPrint()。したがって、実行される実際の操作は、呼び出しているメソッドの名前とノードのタイプによって異なります。
二重発送

今回は、と呼ばれるメソッドNodeに型のパラメーターを渡すことができます。プログラムでノード インスタンスを呼び出した場合、実行される実際の操作は、ノードのタイプ(または)と、渡したビジター インスタンスのタイプ(または)に依存します。NodeVisitorAcceptAcceptVariableRefNodeAssignmentNodeAcceptTypeCheckingVisitorCodeGeneratingVisitor
要素オブジェクトのacceptメソッドはビジターオブジェクトを受け取り、ビジターオブジェクトのメソッドを呼び出しvisitます。ビジターオブジェクトにはいくつかのvisitメソッドがあるため、要素タイプに基づいて適切なvisitメソッドが呼び出されます。ここでは、要素と要素の正しい操作(タイプに基づく)を指定する2つの呼び出し(ダブルディスパッチ)があります。
さて、これがその記事からの関連する引用です:
ビジターは「ダブルディスパッチ」を実施。OO メッセージは通常、「単一のディスパッチ」を明示します。実行される操作は、要求の名前と受信者のタイプによって異なります。「ダブルディスパッチ」では、実行される操作は、リクエストの名前、および 2 つのレシーバーのタイプ (ビジターのタイプとそれが訪問する要素のタイプ) に依存します。
これは基本的に、異なる訪問者が同じタイプにアクセスでき、同じ訪問者が異なるタイプにアクセスできることを意味します。訪問者パターンを使用して実行される名前付き操作の効果は、訪問者と訪問者(二重ディスパッチ)に依存する場合があります。