namespace jive { public class FilteredVisitor : Visitor { readonly Specification condition; readonly Visitor visitor; public FilteredVisitor(Specification condition, Visitor visitor) { this.condition = condition; this.visitor = visitor; } public void visit(T item_to_visit) { if (condition.is_satisfied_by(item_to_visit)) visitor.visit(item_to_visit); } } }