public static void Run()
        {
            Console.WriteLine("-------------------------");
            Console.WriteLine(" FLYWEIGHT PATTERN ");
            Console.WriteLine("-------------------------");

            // El código cliente normalmente crea un montón de flyweights
            // pre-rellenados en la fase de inicialización de la aplicación.
            FlyweightFactory factory = new FlyweightFactory(
                new Car {
                Company = "Chevrolet", Model = "Camaro2018", Color = "pink"
            },
                new Car {
                Company = "Mercedes Benz", Model = "C300", Color = "black"
            },
                new Car {
                Company = "Mercedes Benz", Model = "C500", Color = "red"
            },
                new Car {
                Company = "BMW", Model = "M5", Color = "red"
            },
                new Car {
                Company = "BMW", Model = "X6", Color = "white"
            }
                );

            factory.ListFlyWeights();

            addCarToPoliceDatabase(factory, new Car
            {
                Number  = "CL234IR",
                Owner   = "James Doe",
                Company = "BMW",
                Model   = "M5",
                Color   = "red"
            });

            addCarToPoliceDatabase(factory, new Car
            {
                Number  = "CL234IR",
                Owner   = "James Doe",
                Company = "BMW",
                Model   = "X1",
                Color   = "red"
            });

            factory.ListFlyWeights();

            Console.WriteLine("\n");
        }
        public static void addCarToPoliceDatabase(FlyweightFactory factory, Car car)
        {
            Console.WriteLine("\nCliente: Añadiendo coche a la base de datos");

            var flyweight = factory.GetFlyweight(new Car
            {
                Color   = car.Color,
                Model   = car.Model,
                Company = car.Company
            });

            // El código del cliente almacena o calcula el estado extrínseco y
            // lo pasa a los métodos del Flyweight.
            flyweight.Operation(car);
        }