Inheritance: Wincubate.FlyweightExamples.Coffee
        static void Main(string[] args)
        {
            RandomNameGenerator rng = new RandomNameGenerator();

            for (int i = 0; i < 1000; i++)
            {
                ICoffee c1 = new Cappuccino(rng.GetRandomName());
                c1.Serve();
                ICoffee c2 = new Espresso(rng.GetRandomName());
                c2.Serve();
                ICoffee c3 = new LatteDoppio(rng.GetRandomName());
                c3.Serve();
                ICoffee c4 = new LatteGrande(rng.GetRandomName());
                c4.Serve();
                ICoffee c5 = new LatteTriplo(rng.GetRandomName());
                c5.Serve();
            }

            //Console.WriteLine();
            //Console.WriteLine( $"{Coffee.CoffeesCreated} objects created");
        }
        public ICoffee CreateCoffee(string coffeeType)
        {
            bool exists = _coffees.ContainsKey(coffeeType);

            if (exists == false)
            {
                // This could be done easier of course ;-)
                // See Module 02
                switch (coffeeType)
                {
                case nameof(Cappuccino):
                    _coffees[coffeeType] = new Cappuccino();
                    break;

                case nameof(Espresso):
                    _coffees[coffeeType] = new Espresso();
                    break;

                case nameof(LatteDoppio):
                    _coffees[coffeeType] = new LatteDoppio();
                    break;

                case nameof(LatteGrande):
                    _coffees[coffeeType] = new LatteGrande();
                    break;

                case nameof(LatteTriplo):
                    _coffees[coffeeType] = new LatteTriplo();
                    break;

                default:
                    throw new NotSupportedException($"Coffee type {coffeeType} not supported");
                }
            }

            return(_coffees[coffeeType]);
        }