Суть интерфейсов

При изучении языка C# у меня достаточно долго стоял вопрос, зачем же все-таки нужны интерфейсы. Под катом находится пример из жизни, который объясняет их суть, как говорится "на пальцах".
Уверен, что данный пример поможет любому, у кого возник вопрос по данной теме, изучая этот язык программирования.

Все мы знаем, что в банковой структуре любой страны есть основной банк (который называется "государственный") и банки, которые ему непосредственно подчиняются. Собственно государственный банк рассказывает другим банкам, как вести всякого рода финансовые операции, например оплата кредита, перевод денег на счет. Т.е. по сути он им только говорит, что должно быть на входе и выходе каждой операции.

Допустим в случае перевода денег на счет любой банк должен получить физического/юридического лица деньги и номер счета, куда отправлять эти деньги. Банк в свою очередь предоставляет этому человеку квитанцию о перечислении денег. В данном случае банк пользуется интерфейсом, заданным государственным банком для перечисления денег. На входе - счет и деньги, на выходе - квитанция. И соответственно результат получается у каждого банка один и тот же.

Суть интерфейса: каждый банк имея интерфейс перечисления денег, реализует его по разному. Например, первый банк делает перевод через Western Union, второй - через WebMoney, третий - посредством курьера. Получается следующая вещь: у каждого банка свой способ реализации перевода денег, но государственному банку главное, чтобы на выходе было именно то, что ему нужно, а мелкие банки сами решают, как им это сделать.

Приведу небольшой пример кода, который подытожить все вышесказанное. Я не буду углубляться в детали реализации методов.

public interface IStateBank
{
   int DoMoneyTransfer(int money, int accountNumber);
   void DoPayCredit();
}

class PrivateBank : IStateBank
{
   public int DoMoneyTransfer(int money, int accountNumber)
   {
      Console.WriteLine("We do money transfer: " + money.ToString() + " grn. " + "by WesterUnion" + "Your account number: " + accountNumber.ToString());

      // код реализации перевода

      int ticketNumber = 100;     // возвращаем номер квитанции

      return ticketNumber;
   }

   public void DoPayCredit()
   {
      Console.WriteLine("We do pay credit by WesterUnion");
   }
}

class AvalBank : IStateBank
{
   public int DoMoneyTransfer(int money, int accountNumber)
   {
      Console.WriteLine("We do money transfer: " + money.ToString() + " grn. " + "by WebMoney" + "\n" + "Your account number: " + accountNumber.ToString());

      // код реализации перевода

      int ticketNumber = 1100;

      return ticketNumber;
   }

   public void DoPayCredit()
   {
      Console.WriteLine("We do pay credit by WebMoney");
   }
}

0 коммент.:

Отправить комментарий