Visitor — add operations without changing classes.
Implementation:
1public interface IVisitor2{3 void Visit(Book book);4 void Visit(Electronic electronic);5}67public interface IVisitable8{9 void Accept(IVisitor visitor);10}1112public class PriceVisitor : IVisitor13{14 public decimal Total { get; private set; }15 public void Visit(Book b) => Total += b.Price;16 public void Visit(Electronic e) => Total += e.Price * 1.1m;17}
Key: Visitor for adding operations.