visitor pattern

main
syeffort 1 year ago
parent ebf7cddb25
commit 0a49dc8463
  1. 101
      DesignPattern/DesignPattern/Patterns/VisitorPattern.cs
  2. 4
      DesignPattern/DesignPattern/Program.cs

@ -0,0 +1,101 @@
namespace DesignPattern.Patterns
{
internal class VisitorPattern
{
public interface ICarElement
{
void Accept(ICarVisitor visitor);
}
public class Engine : ICarElement
{
public string Spec => "V4";
void ICarElement.Accept(ICarVisitor visitor)
{
visitor.Visit(this);
}
}
public class Body : ICarElement
{
public string Color => "Silver";
void ICarElement.Accept(ICarVisitor visitor)
{
visitor.Visit(this);
}
}
public class Wheel : ICarElement
{
public string Type => "P26";
void ICarElement.Accept(ICarVisitor visitor)
{
visitor.Visit(this);
}
}
public class Car : ICarElement
{
public string Maker => "BMW";
private List<ICarElement> _elements;
public Car()
{
_elements = new List<ICarElement>()
{
new Engine(),
new Body(),
new Wheel(),
};
}
void ICarElement.Accept(ICarVisitor visitor)
{
foreach (var elem in _elements)
{
elem.Accept(visitor);
}
visitor.Visit(this);
}
}
public interface ICarVisitor
{
void Visit(Engine elememt);
void Visit(Body elememt);
void Visit(Wheel elememt);
void Visit(Car elememt);
}
public class CarPrintVisitor : ICarVisitor
{
void ICarVisitor.Visit(Engine elememt)
{
Console.WriteLine(elememt.Spec);
}
void ICarVisitor.Visit(Body elememt)
{
Console.WriteLine(elememt.Color);
}
void ICarVisitor.Visit(Wheel elememt)
{
Console.WriteLine(elememt.Type);
}
void ICarVisitor.Visit(Car elememt)
{
Console.WriteLine(elememt.Maker);
}
}
public static void Work()
{
ICarElement car = new Car();
ICarVisitor visitor = new CarPrintVisitor();
car.Accept(visitor);
}
}
}

@ -10,6 +10,8 @@ class Program
// CommandClient.Work();
StateMachinePattern.Work();
//StateMachinePattern.Work();
VisitorPattern.Work();
}
}

Loading…
Cancel
Save