Description
Visitor pattern is a way of separating an algorithm from an object structure on which it operates. A practical result of this separation is the ability to add new operations to existing object structures without modifying the structures.
Example in .NET :
Visitor
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
namespace Visitor;
internal class VisitorDemo
{
public static void VisitMethods()
{
var Code = @"""
using System;
namespace Test1
{
class Program
{
static void Main(string[] args)
{
var dt=DateTime.Now;
Console.WriteLine(dt);
}
}
}
""";
var tree = CSharpSyntaxTree.ParseText(Code);
var node = tree.GetRoot();
MethodVisiting LG = new MethodVisiting();
//start visiting
var sn = LG.Visit(node);
}
}
public class MethodVisiting : CSharpSyntaxRewriter
{
public override SyntaxNode? VisitMethodDeclaration(MethodDeclarationSyntax node)
{
if (node.Body == null || node.Body.Statements.Count == 0)
return base.VisitMethodDeclaration(node);
var parent = node.Parent as ClassDeclarationSyntax;
if (parent == null)
return base.VisitMethodDeclaration(node);
var nameMethod = node.Identifier.Text;
var nameClass = parent.Identifier.Text;
Console.WriteLine($"visiting {nameMethod} from {nameClass}");
return base.VisitMethodDeclaration(node);
}
}
Learn More
Homework
Implement a visitor that will allow you to calculate the total price of a shopping cart. The shopping cart should contain items with a price and a quantity.Visit every item and make the sum
Leave a Reply