using System.Collections.Generic;
public interface IOperation
void Apply(HeadingNode node);
void Apply(AnchorNode node);
public class HighlightOperation: IOperation
public void Apply(HeadingNode node)
Console.WriteLine("Higlighting heading");
public void Apply(AnchorNode node)
Console.WriteLine("Higlighting anchor");
public class PlainTextOperation: IOperation
public void Apply(HeadingNode node)
Console.WriteLine("PlainText heading");
public void Apply(AnchorNode node)
Console.WriteLine("PlainText anchor");
public interface IHtmlNode
void Execute(IOperation operation);
public class HeadingNode: IHtmlNode
public void Execute(IOperation operation)
public class AnchorNode: IHtmlNode
public void Execute(IOperation operation)
public class HtmlDocument
private List<IHtmlNode> nodes = new List<IHtmlNode>();
public void Add(IHtmlNode node)
public void Execute(IOperation operation) {
foreach(var node in nodes)
public static void Main()
var htmlDocument = new HtmlDocument();
htmlDocument.Add(new HeadingNode());
htmlDocument.Add(new AnchorNode());
htmlDocument.Execute(new HighlightOperation());
htmlDocument.Execute(new PlainTextOperation());