odwiedzajacy
unknown
csharp
2 years ago
3.1 kB
13
Indexable
using System; using System.Collections.Generic; namespace Odwiedzajacy { public interface ICity { void Accept(IVisitor visitor); } public class PolishCity : ICity { public string City; public PolishCity(string city) { City = city; } public void Accept(IVisitor visitor) { visitor.Visit(this); } } public class NetherlandCity : ICity { public string City; public NetherlandCity(string city) { City = city; } public void Accept(IVisitor visitor) { visitor.Visit(this); } } public class USACity : ICity { public string City; public USACity(string city) { City = city; } public void Accept(IVisitor visitor) { visitor.Visit(this); } } public interface IVisitor { void Visit(PolishCity element); void Visit(NetherlandCity element); void Visit(USACity element); } class Visitor : IVisitor { /* UZUPEŁNIĆ */ private int USACounter = 0; private int PolishCounter = 0; private int NetherlandCounter = 0; public void Visit(PolishCity element) { Console.WriteLine($"Odwiedzam {element.City}"); PolishCounter++; } public void Visit(USACity element) { Console.WriteLine($"Odwiedzam {element.City}"); USACounter++; } public void Visit(NetherlandCity element) { Console.WriteLine($"Odwiedzam {element.City}"); NetherlandCounter++; } /* UZUPEŁNIĆ */ public void PrintInfo() { Console.WriteLine($"Byłem w {PolishCounter} Polskich miastach," + $" {NetherlandCounter} Holenderskich miastach i {USACounter} miastach USA."); } } public class Client { public static void ClientCode(List<ICity> components, IVisitor visitor) { foreach (var component in components) { component.Accept(visitor); } } } class Program { static void Main(string[] args) { List<ICity> components = new List<ICity>{ new PolishCity("Kraków"), new PolishCity("Szczecin"), new PolishCity("Rzeszów"), new PolishCity("Gdańsk"), new PolishCity("Katowice"), new NetherlandCity("Maastricht"), new NetherlandCity("Amsterdam"), new USACity("Nowy Jork"), new USACity("Waszyngton"), new USACity("Boston"), new USACity("Princeton"), new USACity("Seattle"), new USACity("Chicago"), new USACity("Huston") }; var visitor = new Visitor(); Client.ClientCode(components, visitor); visitor.PrintInfo(); } } }
Editor is loading...
Leave a Comment