タグ付けされた質問 「visitor-pattern」

3
抽象構文ツリーの訪問者パターンの実装
私は自分のプログラミング言語を作成している最中で、それは学習目的のためにしています。私はすでに自分の言語のサブセット用にレクサーと再帰降下パーサーを作成しました(現在、などの数式をサポートし+ - * /ています)。パーサーは、抽象構文ツリーを返します。抽象ツリーでは、Evaluateメソッドを呼び出して式の結果を取得します。すべて正常に動作します。ほぼ私の現在の状況は次のとおりです(C#のコード例、これはほとんど言語に依存しません): public abstract class Node { public abstract Double Evaluate(); } public class OperationNode : Node { public Node Left { get; set; } private String Operator { get; set; } private Node Right { get; set; } public Double Evaluate() { if (Operator == "+") return …

1
大きなオブジェクト階層での訪問者パターンの使用
環境 オブジェクトの階層(式ツリー)で「疑似」ビジターパターン(二重ディスパッチを使用しないように疑似)を使用しています。 public interface MyInterface { void Accept(SomeClass operationClass); } public class MyImpl : MyInterface { public void Accept(SomeClass operationClass) { operationClass.DoSomething(); operationClass.DoSomethingElse(); // ... and so on ... } } ただし、MyInterfaceの実装の数は非常に多く(〜50以上)、余分な操作を追加する必要がないため、この設計は疑わしく、かなり快適でした。 各実装は一意であり(異なる式または演算子です)、一部は複合(つまり、他の演算子/リーフノードを含む演算子ノード)です。 トラバーサルは現在、ツリーのルートノードでAccept操作を呼び出すことによって実行され、その操作は、その子ノードのそれぞれでAcceptを呼び出します。 しかし、きれいな印刷などの新しい操作を追加する必要があるときが来ました。 public class MyImpl : MyInterface { // Property does not come from MyInterface public string …

4
このシナリオでは訪問者パターンは有効ですか?
私のタスクの目標は、スケジュールされた繰り返しタスクを実行できる小さなシステムを設計することです。定期的なタスクとは、「月曜日から金曜日の午前8時から午後5時まで、毎時間管理者にメールを送信する」のようなものです。 RecurringTaskという基本クラスがあります。 public abstract class RecurringTask{ // I've already figured out this part public bool isOccuring(DateTime dateTime){ // implementation } // run the task public abstract void Run(){ } } また、RecurringTaskから継承されたクラスがいくつかあります。それらの1つはSendEmailTaskと呼ばれます。 public class SendEmailTask : RecurringTask{ private Email email; public SendEmailTask(Email email){ this.email = email; } public override void Run(){ …

5
Javaで同等の慣用的なパターンマッチング
いくつかのイベントを解析してSTDIN「実行」するシミュレータを構築しています。私のバックグラウンドは、最近のほとんどが関数型プログラミングであるため、次のようなことをするのは自然なことのようです。 data Event = Thing1 String Int | Thing2 Int | Thing3 String String Int Parse :: String -> [Event] Simulate :: [Event] -> [Result] シミュレートする場所 case event of Thing1 a b => compute for thing one | Thing2 a => compute for thing two などJavaでこの種のことをする慣用的な方法は何ですか?グーグルで私はネストされたクラスとビジターパターンの方向を指摘されましたが、私の試みではそれはかなり重いようです。型消去は、私と一生懸命戦っているようです。正しく行われるように見えるものの概要を教えていただけますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.