Advertisement
Mizzzlo

Untitled

Sep 19th, 2023
437
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.64 KB | None | 0 0
  1. namespace IMJunior
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             var orderForm = new OrderForm();
  8.  
  9.             System system = orderForm.ShowForm();
  10.  
  11.             system.MakeCallback();
  12.         }
  13.     }
  14.     public class OrderForm
  15.     {
  16.         private const string _qiwi = "QIWI";
  17.         private const string _webMoney = "WebMoney";
  18.         private const string _card = "Card";
  19.  
  20.         public System ShowForm()
  21.         {
  22.             Console.WriteLine("Мы принимаем: QIWI, WebMoney, Card");
  23.  
  24.             //симуляция веб интерфейса
  25.             Console.WriteLine("Какое системой вы хотите совершить оплату?");
  26.  
  27.             string systemId = Console.ReadLine();
  28.  
  29.             System result = systemId switch
  30.             {
  31.                 "QIWI" => new System(new QiwiSystemFactory(), _qiwi),
  32.                 "WebMoney" => new System(new WemMoneySystemFactory(), _webMoney),
  33.                 "Card" => new System(new CardSystemFactory(), _card),
  34.                 _ => default
  35.             };
  36.  
  37.             return result;
  38.         }
  39.     }
  40.  
  41.     public class System
  42.     {
  43.         private ISystemCallback _paymentHandler;
  44.  
  45.         public System(SystemFactory systemFactory, string systemName)
  46.         {
  47.             _paymentHandler = systemFactory.CreateSystem(systemName);
  48.         }
  49.  
  50.         public void MakeCallback()
  51.         {
  52.             _paymentHandler.MakeCallback();
  53.         }
  54.     }
  55.  
  56.     public abstract class SystemFactory
  57.     {
  58.         public abstract ISystemCallback CreateSystem(string systemName);
  59.     }
  60.  
  61.     public class QiwiSystemFactory : SystemFactory
  62.     {
  63.         public override ISystemCallback CreateSystem(string systemName)
  64.         {
  65.             return new QiwiSystemCallback(new QiwiPaymentHandler(systemName));
  66.         }
  67.     }
  68.  
  69.     public class WemMoneySystemFactory : SystemFactory
  70.     {
  71.         public override ISystemCallback CreateSystem(string systemName)
  72.         {
  73.             return new WebMoneySystemCallback(new WebMoneyPaymentHandler(systemName));
  74.         }
  75.     }
  76.  
  77.     public class CardSystemFactory : SystemFactory
  78.     {
  79.         public override ISystemCallback CreateSystem(string systemName)
  80.         {
  81.             return new CardSystemCallback(new CardPaymentHandler(systemName));
  82.         }
  83.     }
  84.  
  85.     public abstract class SystemCallback : ISystemCallback
  86.     {
  87.         protected IPaymentHandler PaymentHandler;
  88.  
  89.         protected SystemCallback(IPaymentHandler paymentHandler)
  90.         {
  91.             PaymentHandler = paymentHandler;
  92.         }
  93.  
  94.         public abstract void MakeCallback();
  95.     }
  96.  
  97.     public class QiwiSystemCallback : SystemCallback
  98.     {
  99.         public QiwiSystemCallback(IPaymentHandler paymentHandler) : base(paymentHandler)
  100.         {
  101.         }
  102.  
  103.         public override void MakeCallback()
  104.         {
  105.             Console.WriteLine("Перевод на страницу QIWI...");
  106.             PaymentHandler.ShowPaymentResult();
  107.         }
  108.     }
  109.  
  110.     public class WebMoneySystemCallback : SystemCallback
  111.     {
  112.         public WebMoneySystemCallback(IPaymentHandler paymentHandler) : base(paymentHandler)
  113.         {
  114.         }
  115.  
  116.         public override void MakeCallback()
  117.         {
  118.             Console.WriteLine("Вызов API WebMoney...");
  119.             PaymentHandler.ShowPaymentResult();
  120.         }
  121.     }
  122.  
  123.     public class CardSystemCallback : SystemCallback
  124.     {
  125.         public CardSystemCallback(IPaymentHandler paymentHandler) : base(paymentHandler)
  126.         {
  127.         }
  128.  
  129.         public override void MakeCallback()
  130.         {
  131.             Console.WriteLine("Вызов API банка эмитера карты Card...");
  132.             PaymentHandler.ShowPaymentResult();
  133.         }
  134.     }
  135.  
  136.     public abstract class PaymentHandler : IPaymentHandler
  137.     {
  138.         protected readonly string SystemId;
  139.  
  140.         protected PaymentHandler(string systemId)
  141.         {
  142.             SystemId = systemId;
  143.         }
  144.  
  145.         public virtual void ShowPaymentResult()
  146.         {
  147.             Console.WriteLine($"Вы оплатили с помощью {SystemId}");
  148.         }
  149.     }
  150.  
  151.     public class QiwiPaymentHandler : PaymentHandler
  152.     {
  153.         public QiwiPaymentHandler(string systemId) : base(systemId)
  154.         {
  155.         }
  156.  
  157.         public override void ShowPaymentResult()
  158.         {
  159.             base.ShowPaymentResult();
  160.             Console.WriteLine("Проверка платежа через QIWI...");
  161.             Console.WriteLine("Оплата прошла успешно!");
  162.         }
  163.     }
  164.  
  165.     public class WebMoneyPaymentHandler : PaymentHandler
  166.     {
  167.         public WebMoneyPaymentHandler(string systemId) : base(systemId)
  168.         {
  169.         }
  170.  
  171.         public override void ShowPaymentResult()
  172.         {
  173.             base.ShowPaymentResult();
  174.             Console.WriteLine("Проверка платежа через WebMoney...");
  175.             Console.WriteLine("Оплата прошла успешно!");
  176.         }
  177.     }
  178.  
  179.     public class CardPaymentHandler : PaymentHandler
  180.     {
  181.         public CardPaymentHandler(string systemId) : base(systemId)
  182.         {
  183.         }
  184.  
  185.         public override void ShowPaymentResult()
  186.         {
  187.             base.ShowPaymentResult();
  188.             Console.WriteLine("Проверка платежа через Card...");
  189.             Console.WriteLine("Оплата прошла успешно!");
  190.         }
  191.     }
  192.  
  193.     public interface ISystemCallback
  194.     {
  195.         public abstract void MakeCallback();
  196.  
  197.     }
  198.  
  199.     public interface IPaymentHandler
  200.     {
  201.         public void ShowPaymentResult();
  202.     }
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement