public bool Equals(Carret other) { return(_length == other._length && Index == other.Index); }
public Selector(T[] arr) { _array = arr; _length = _array.Length; _index = new Carret(_length); }
static void Main(string[] args) { Console.WriteLine("Regular Visitor pattern"); VisitorDomain.IFruitVisitor visitor = new VisitorDomain.FruitVisitor(); VisitorDomain.Fruit apple = new VisitorDomain.Apple("Golden delicious"); VisitorDomain.Fruit grape = new VisitorDomain.Grape("Merlot"); apple.Accept(visitor); grape.Accept(visitor); Console.WriteLine("======================="); Console.WriteLine("Acyclic Visitor pattern"); DegenerateVegetableVisitor acyclicVisitor = new CarretVisitor(); Vegetable carret = new Carret("Red"); carret.Accept(acyclicVisitor); acyclicVisitor = new CucumberVisitor(); Vegetable cucumber = new Cucumber("Green"); cucumber.Accept(acyclicVisitor); Console.WriteLine("======================="); Console.WriteLine("Generic Acyclic Visitor pattern"); CarVisitor carVisitor = new CarVisitor <Toyota>(); Toyota toyota = new Toyota("Corrolla"); toyota.Accept(carVisitor); carVisitor = new CarVisitor <Bmw>() as CarVisitor; Bmw bmw = new Bmw("4"); bmw.Accept(carVisitor); carVisitor = new CarVisitor <Mercedes>() as CarVisitor; Mercedes mercedes = new Mercedes("default"); mercedes.Accept(carVisitor); Console.WriteLine("======================="); Console.WriteLine("Full Visitor pattern"); List <FullDomain.Fruit> fruits = new List <FullDomain.Fruit>() { new FullDomain.Grape() { NumberOfGrapes = 3 }, new FullDomain.Banana() { NumberOfFingers = 4 }, new FullDomain.Apple(), new FullDomain.Grape() { NumberOfGrapes = 6 }, new FullDomain.Banana() { NumberOfFingers = 3 }, new FullDomain.Apple(), new FullDomain.Apple(), new FullDomain.Grape() { NumberOfGrapes = 7 }, new FullDomain.Grape() { NumberOfGrapes = 4 }, new FullDomain.Banana() { NumberOfFingers = 3 } }; List <FullDomain.Apple> allApples = FullDomain.FruitExtensions.Pick <FullDomain.Apple>(fruits).ToList(); // Because of namespace clashes I call extension method like this Console.WriteLine($"Number of apples visited {allApples.Count}"); List <FullDomain.Grape> allGrapes = FullDomain.FruitExtensions.Pick <FullDomain.Grape>(fruits).ToList(); // Because of namespace clashes I call extension method like this Console.WriteLine($"Number of grape objects visited {allGrapes.Count}, number of grapes {allGrapes.Sum(s => s.NumberOfGrapes)}"); List <FullDomain.Banana> allBananas = FullDomain.FruitExtensions.Pick <FullDomain.Banana>(fruits).ToList(); // Because of namespace clashes I call extension method like this Console.WriteLine($"Number of bananas visited {allBananas.Count}, number of fingers {allBananas.Sum(s => s.NumberOfFingers)}"); FullDomain.FruitWeightCalculatorVisitor weightCalculator = new FullDomain.FruitWeightCalculatorVisitor(); fruits.ForEach(fruit => fruit.Accept(weightCalculator)); Console.WriteLine($"Weight of fruits {weightCalculator.WeightInGrams}"); Console.Write("Press any key to continue. . ."); Console.ReadKey(); }