Когда полезен «интерфейс»? - PullRequest
2 голосов
/ 23 августа 2010

ООП интерфейсы.

Ответы [ 5 ]

18 голосов
/ 23 августа 2010

По своему опыту я нахожу интерфейсы очень полезными, когда речь идет о разработке и реализации нескольких взаимодействующих модулей с несколькими разработчиками.Например, если есть два разработчика, один из которых работает с бэкэндом, а другой с внешним интерфейсом (UI), они могут начать работать параллельно, как только будут завершены интерфейсы.Таким образом, если все будут следовать определенному договору, интеграция станет безболезненной.И вот что интерфейсы точно делают - определяют контракт!

В основном это избегает этой ситуации: alt text

2 голосов
/ 23 августа 2010

Интерфейсы очень полезны, когда вам нужен класс для работы с общими методами, реализованными подклассами.

public class Person
{
  public void Eat(IFruit fruit)
  {
    Console.WriteLine("The {0} is delicious!",fruit.Name);
  }
}

public interface IFruit
{
   string Name { get; }
}
public class Apple : IFruit
{
  public string Name
  {
    get { return "Apple"; }
  }
}
public class Strawberry : IFruit
{
  public string Name
  {
    get { return "Strawberry"; }
  }
}
1 голос
/ 23 августа 2010

Интерфейсы очень полезны в случае множественного наследования.

0 голосов
/ 23 августа 2010

В основном, Интерфейсы позволяют Программе изменять Реализацию без необходимости сообщать всем клиентам, что им теперь нужен объект "Bar" вместо объекта "Foo".Он сообщает пользователям этого класса, что он делает, а не то, чем он является.

Пример:

Метод, который вы написали, хочет перебрать заданные ему значения.Теперь есть несколько вещей, которые вы можете перебирать, например, списки, массивы и коллекции.

Без интерфейсов вам придется написать:

public class Foo<T>
{
    public void DoSomething(T items[])
    {
    }

    public void DoSomething(List<T> items)
    {
    }

    public void DoSomething(SomeCollectionType<T> items)
    {
    }

}

И для каждого нового итеративного типа, который у вас будетчтобы добавить другой метод, или пользователь вашего класса должен будет привести свои данные.Например, с этим решением, если у него есть Collection of FooCollectionType, он должен преобразовать его в Array, List или SomeOtherCollectionType.

С интерфейсами вам нужно только:

public class Foo<T>
{
    public void DoSomething(IEnumerable<T> items)
    {
    }
}

Это означает, что ваш класснужно только знать, что все, что пользователь передает ему, может быть повторено.Если пользователь изменяет свой SomeCollectionType на AnotherCollectionType, он не должен ни приводить, ни изменять ваш класс.

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

0 голосов
/ 23 августа 2010
  1. Интерфейс полностью абстрагирует знания о реализации от клиента.
  2. Это позволяет нам динамически изменять их поведение. Это означает, как это будет действовать, зависит от динамической специализации (или замены).
  3. Он предотвращает поломку клиента, если разработчик внес некоторые изменения для реализации или добавил новую специализацию / реализацию.
  4. Это дает открытый способ расширения реализации.

Язык программирования (C #, Java)

Эти языки не поддерживают множественное наследование от классов, однако они поддерживают множественное наследование от интерфейсов; это еще одно преимущество интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...