Table of Contents

Visitor Pattern API Reference

Complete API documentation for the Visitor pattern in PatternKit.

Namespace

using PatternKit.Behavioral.Visitor;

Visitor<TBase, TResult>

Fluent visitor that dispatches by runtime type and returns a result.

public sealed class Visitor<TBase, TResult>

Type Parameters

Parameter Description
TBase The base type for visitable elements
TResult The return type of visit operations

Delegates

Handler

public delegate TResult Handler(in TBase node);

Processes a node and returns a result.

Methods

Method Returns Description
Visit(in TBase node) TResult Visits node, returns result
TryVisit(in TBase node, out TResult result) bool Attempts visit; returns false if no match

Static Methods

Method Returns Description
Create() Builder Creates a new fluent builder

Exceptions

Method Exception Condition
Visit InvalidOperationException No handler matched and no default

Example

var visitor = Visitor<Node, string>.Create()
    .On<Add>(_ => "+")
    .On<Number>(n => n.Value.ToString())
    .Default(_ => "?")
    .Build();

var result = visitor.Visit(node);

if (visitor.TryVisit(node, out var r))
    Console.WriteLine(r);

Visitor<TBase, TResult>.Builder

Fluent builder for configuring the visitor.

public sealed class Builder

Methods

Method Returns Description
On<T>(Func<T, TResult> handler) Builder Registers handler for type T
On<T>(TResult constant) Builder Returns constant for type T
Default(Handler handler) Builder Sets default handler
Default(Func<TBase, TResult> handler) Builder Sets default (convenience)
Build() Visitor<TBase, TResult> Builds immutable visitor

ActionVisitor<TBase>

Visitor for side effects without a return value.

public sealed class ActionVisitor<TBase>

Methods

Method Returns Description
Visit(in TBase node) void Visits node
TryVisit(in TBase node) bool Attempts visit; returns false if no match

Static Methods

Method Returns Description
Create() Builder Creates a new builder

Builder Methods

Method Returns Description
On<T>(Action<T> handler) Builder Registers action for type T
Default(Action<TBase> handler) Builder Sets default action
Build() ActionVisitor<TBase> Builds the visitor

Example

var visitor = ActionVisitor<Event>.Create()
    .On<OrderPlaced>(e => SendEmail(e.OrderId))
    .On<OrderShipped>(e => SendSms(e.TrackingNumber))
    .Default(_ => Log("Unknown event"))
    .Build();

visitor.Visit(event);

AsyncVisitor<TBase, TResult>

Async visitor returning a value.

public sealed class AsyncVisitor<TBase, TResult>

Methods

Method Returns Description
VisitAsync(TBase node, CancellationToken ct) ValueTask<TResult> Visits asynchronously

Builder Methods

Method Returns Description
On<T>(Func<T, CancellationToken, ValueTask<TResult>> handler) Builder Async handler
On<T>(Func<T, TResult> handler) Builder Sync handler (wrapped)
Default(...) Builder Sets default handler
Build() AsyncVisitor<TBase, TResult> Builds the visitor

Example

var visitor = AsyncVisitor<Request, Response>.Create()
    .On<GetUser>(async (r, ct) => await userService.GetAsync(r.Id, ct))
    .On<CreateUser>(async (r, ct) => await userService.CreateAsync(r.Data, ct))
    .Build();

var response = await visitor.VisitAsync(request, ct);

AsyncActionVisitor<TBase>

Async visitor for side effects.

public sealed class AsyncActionVisitor<TBase>

Methods

Method Returns Description
VisitAsync(TBase node, CancellationToken ct) ValueTask Visits asynchronously

Builder Methods

Method Returns Description
On<T>(Func<T, CancellationToken, ValueTask> handler) Builder Async action
On<T>(Action<T> handler) Builder Sync action (wrapped)
Default(...) Builder Sets default action
Build() AsyncActionVisitor<TBase> Builds the visitor

Thread Safety

Component Thread-Safe
Builder (all variants) No - use from single thread
Visitor Yes - immutable after build
ActionVisitor Yes - immutable after build
AsyncVisitor Yes - immutable after build
AsyncActionVisitor Yes - immutable after build

See Also