public void Work() { // For example - we have already known factory types. We can // read it from configuration or another source. var factoryTypes = new List <VehicleFactory.VehicleType>() { VehicleFactory.VehicleType.Civil, VehicleFactory.VehicleType.Millitary }; foreach (var factoryType in factoryTypes) { var factory = VehicleFactory.GetFactory(factoryType); IShip ship = factory.CreateShip(); ICar car = factory.CreateCar(); IHelicopter helicopter = factory.CreateHelicopter(); ship.Bell(); car.Horn(); helicopter.Respond(); Console.WriteLine(""); } }