static void Main(string[] args) { SystemConsole.WriteLine("Hello World!"); foreach (IFactory factory in Factories) { IFactoryObject factoryObject = factory.MakeObject(); factoryObject.PrintSelf(); } IBuiltObject builtObject1 = new Builder(_logger) .Start() .Annoying() .Loud() .WithColor(ConsoleColor.Green) .Build(); IBuiltObject builtObject2 = new Builder(_logger) .Start() .Quiet() .WithColor(ConsoleColor.Yellow) .Build(); builtObject1.PrintSelf(); builtObject2.PrintSelf(); foreach (IFactoryMethod factoryMethod in FactoryMethods) { IFactoryObject factoryObject = factoryMethod.CreateObject(); factoryObject.PrintSelf(); } IPrototype prototype = Prototype.InitialPrototype.Clone(); for (int i = 0; i < 10; ++i) { SystemConsole.WriteLine($"prototype #{prototype.Id} copied"); prototype = prototype.Clone(); } Singleton singleton = Singleton.Instance; SystemConsole.WriteLine($"Singleton created at {singleton.CreationDateTime}"); DivisionResult <int> divisionResult = _multiplyDivideAdapter.Divide(10, 3); SystemConsole.WriteLine($"{nameof(MultiplyDivideAdapter)}: 10 / 3 = {divisionResult.WholePart} with remainder {divisionResult.Remainder}"); int multiplicationResult = _multiplyDivideAdapter.Multiply(10, 3); SystemConsole.WriteLine($"{nameof(MultiplyDivideAdapter)}: 10 x 3 = {multiplicationResult}"); _logger.Log("Turn on hot"); _hotWaterPipeBridge.TurnOn(); _logger.Log("Turn off hot"); _hotWaterPipeBridge.TurnOff(); _logger.Log("Sprinkling hot"); _hotWaterPipeBridge.Sprinkle(); _logger.Log("Turn on cold"); _coldWaterPipeBridge.TurnOn(); _logger.Log("Turn off cold"); _coldWaterPipeBridge.TurnOff(); _logger.Log("Sprinkling cold"); _coldWaterPipeBridge.Sprinkle(); _TraverseCompositeTree(_composite); _logger.Log($"It seems we have a gift! First let's unwrap the {_wrapper.GetType().Name}"); GiftBox giftBox = (_wrapper as WrappingPaper).Unwrap(); _logger.Log($"We have the {giftBox.GetType().Name} open, now let's take our gift out."); Gift gift = giftBox.Open(); _logger.Log($"The gift is a {gift.Name}!"); _logger.Log($"Random divided numbers from facade: {_facade.GetRandomNumbersAndDivideThem()}"); _logger.Log($"Random multiplied numbers from facade: {_facade.GetRandomNumbersAndMultiplyThem()}"); SystemConsole.ReadLine(); }