private static void TryAdapter2(KoreanWallOutlet outlet, AmericanPlug americanPlug)
        {
            var adapter2 = new RegulatedAdapter(americanPlug);

            outlet.PlugIn(adapter2);
            var powerApplied = outlet.ApplyPower();

            if (powerApplied)
            {
                Console.WriteLine("Used regulated adapter Device turned on.");
            }
        }
 private static void TryAdapter1(KoreanWallOutlet outlet, AmericanPlug americanPlug)
 {
     try
     {
         // the voltages don't match so this won't work either
         var adapter1 = new UnregulatedAdapter(americanPlug);
         outlet.PlugIn(adapter1);
         outlet.ApplyPower(); // boom
     }
     catch (Exception ex)
     {
         Console.WriteLine($"Used unregulated adapter. {ex.Message}");
     }
 }
        /********************* ADAPTER PATTERN ******************************
        * In short, the adapter pattern is a way you can make one interface
        * work with a different interface, without modifying either. This
        * facilitates SRP, allowing you to work with various circumstances
        * without contaminating your model.
        *
        * This example shows a scenario where you don't have the option to
        * base class the outlet because you don't own the library in which
        * it resides, simulating a scenario where you either don't have
        * access to the library source, or when modifying the source would
        * complicate or contaminate the original model.
        ********************************************************************/

        private static void Main(string[] args)
        {
            var koreanOutlet = new KoreanWallOutlet();

            TryKoreanPlug(koreanOutlet);

            var americanPlug = new AmericanPlug();

            // won't compile because wrong plug/doesn't fit the interface
            //outlet.PlugIn(americanPlug);

            //TryAdapter1(koreanOutlet, americanPlug);
            //TryAdapter2(koreanOutlet, americanPlug);

            Console.ReadKey();
        }
 public UnregulatedAdapter(AmericanPlug americanPlug)
 {
     _americanPlug = americanPlug;
 }