Advertisement
VodVas

OCP.cs

Dec 18th, 2024
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.57 KB | Spirit | 0 0
  1. namespace OCP
  2. {
  3.     internal class Program
  4.     {
  5.         private static void Main()
  6.         {
  7.             PaymentSystemFactory paymentSystemFactory = new PaymentSystemFactory();
  8.  
  9.             var orderForm = new OrderForm();
  10.  
  11.             try
  12.             {
  13.                 string systemId = orderForm.ShowForm();
  14.  
  15.                 IPaymentSystem paymentSystem = paymentSystemFactory.CreatePaymentSystem(systemId);
  16.  
  17.                 var paymentHandler = new PaymentService(paymentSystem);
  18.  
  19.                 paymentHandler.ProcessPayment();
  20.                 paymentHandler.ShowPaymentResult();
  21.             }
  22.             catch (Exception exception)
  23.             {
  24.                 Console.WriteLine($"Ошибка: {exception.Message}");
  25.             }
  26.         }
  27.     }
  28.  
  29.     public class PaymentSystemFactory
  30.     {
  31.         private readonly Dictionary<string, IPaymentSystem> PaymentSystems = new Dictionary<string, IPaymentSystem>
  32.     {
  33.         { PaymentSystemIdentifiers.Qiwi, new QiwiPaymentSystem() },
  34.         { PaymentSystemIdentifiers.WebMoney, new WebMoneyPaymentSystem() },
  35.         { PaymentSystemIdentifiers.Card, new CardPaymentSystem() },
  36.         { PaymentSystemIdentifiers.PayPal, new PayPalPaymentSystem() },
  37.     };
  38.  
  39.         public IPaymentSystem CreatePaymentSystem(string systemId)
  40.         {
  41.             if (string.IsNullOrWhiteSpace(systemId))
  42.             {
  43.                 throw new ArgumentException("Идентификатор платежной системы не может быть пустым или содержать только пробелы.", nameof(systemId));
  44.             }
  45.  
  46.             if (PaymentSystems.TryGetValue(systemId, out IPaymentSystem paymentSystem))
  47.             {
  48.                 return paymentSystem;
  49.             }
  50.  
  51.             throw new NotSupportedException($"Платежная система с идентификатором '{systemId}' не поддерживается.");
  52.         }
  53.     }
  54.  
  55.     public static class PaymentSystemIdentifiers
  56.     {
  57.         public const string Qiwi = "qiwi";
  58.         public const string WebMoney = "webmoney";
  59.         public const string Card = "card";
  60.         public const string PayPal = "paypal";
  61.     }
  62.  
  63.     public interface IPaymentSystem
  64.     {
  65.         public string Id { get; }
  66.         public void ProcessPayment();
  67.         public void CheckPayment();
  68.     }
  69.  
  70.     public class QiwiPaymentSystem : IPaymentSystem
  71.     {
  72.         public string Id => PaymentSystemIdentifiers.Qiwi;
  73.  
  74.         public void ProcessPayment()
  75.         {
  76.             Console.WriteLine("Перевод на страницу QIWI...");
  77.         }
  78.  
  79.         public void CheckPayment()
  80.         {
  81.             Console.WriteLine("Проверка платежа через QIWI...");
  82.         }
  83.     }
  84.  
  85.     public class WebMoneyPaymentSystem : IPaymentSystem
  86.     {
  87.         public string Id => PaymentSystemIdentifiers.WebMoney;
  88.  
  89.         public void ProcessPayment()
  90.         {
  91.             Console.WriteLine("Вызов API WebMoney...");
  92.         }
  93.  
  94.         public void CheckPayment()
  95.         {
  96.             Console.WriteLine("Проверка платежа через WebMoney...");
  97.         }
  98.     }
  99.  
  100.     public class CardPaymentSystem : IPaymentSystem
  101.     {
  102.         public string Id => PaymentSystemIdentifiers.Card;
  103.  
  104.         public void ProcessPayment()
  105.         {
  106.             Console.WriteLine("Вызов API банка эмитента карты...");
  107.         }
  108.  
  109.         public void CheckPayment()
  110.         {
  111.             Console.WriteLine("Проверка платежа через карту...");
  112.         }
  113.     }
  114.  
  115.     public class PayPalPaymentSystem : IPaymentSystem
  116.     {
  117.         public string Id => PaymentSystemIdentifiers.PayPal;
  118.  
  119.         public void CheckPayment()
  120.         {
  121.             Console.WriteLine("Перевод на страницу PayPal...");
  122.         }
  123.  
  124.         public void ProcessPayment()
  125.         {
  126.             Console.WriteLine("Проверка платежа через PayPal...");
  127.         }
  128.     }
  129.  
  130.     public class PaymentService
  131.     {
  132.         private readonly IPaymentSystem _paymentSystem;
  133.  
  134.         public PaymentService(IPaymentSystem paymentSystem)
  135.         {
  136.             if (paymentSystem == null)
  137.             {
  138.                 throw new ArgumentNullException("Платежная система не может быть null.", nameof(paymentSystem));
  139.             }
  140.  
  141.             _paymentSystem = paymentSystem;
  142.         }
  143.  
  144.         public void ProcessPayment()
  145.         {
  146.             _paymentSystem.ProcessPayment();
  147.         }
  148.  
  149.         public void ShowPaymentResult()
  150.         {
  151.             Console.WriteLine($"Вы оплатили с помощью {_paymentSystem.Id}");
  152.  
  153.             _paymentSystem.CheckPayment();
  154.  
  155.             Console.WriteLine("Оплата прошла успешно!");
  156.         }
  157.     }
  158.  
  159.     public class OrderForm
  160.     {
  161.         public string ShowForm()
  162.         {
  163.             Console.WriteLine($"Мы принимаем: {PaymentSystemIdentifiers.Qiwi}, {PaymentSystemIdentifiers.WebMoney}, {PaymentSystemIdentifiers.Card}, {PaymentSystemIdentifiers.PayPal}");
  164.             Console.WriteLine("Какой системой вы хотите совершить оплату?");
  165.  
  166.             string systemId = Console.ReadLine();
  167.  
  168.             if (string.IsNullOrWhiteSpace(systemId))
  169.             {
  170.                 throw new ArgumentException("Идентификатор платежной системы не может быть пустым.", nameof(systemId));
  171.             }
  172.  
  173.             return systemId.Trim().ToLower();
  174.         }
  175.     }
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement