Дизайн приложения - когда следует использовать интерфейсы? - PullRequest
1 голос
/ 29 декабря 2010

Интерфейс я понимаю как контракт, который можно применять к классам, которые в противном случае не имели бы ничего общего (например, Comparable в Java).Тем не менее, в каких ситуациях у вас будет рефлекс добавления интерфейса на этапе проектирования?

Ответы [ 3 ]

5 голосов
/ 29 декабря 2010

Всякий раз, когда вы используете статически типизированный язык и хотите, чтобы разработчик мог использовать ваш код, предоставляя альтернативную реализацию - другими словами, на таком языке необходимо добиться низкого (er) связывания.

Языки, которые, как правило, используют ducktyping, а не строгую проверку типов, например, python, обычно не нуждаются в интерфейсах.

5 голосов
/ 29 декабря 2010

«Я как-то понимаю интерфейс как контракт, который может быть применен к классам, которые иначе не имели бы ничего общего» - это, вероятно, не тот способ думать о том, что такое интерфейс.

Интерфейс описывает поведение, а реализация интерфейса означает, что класс заключает контракт для предоставления такого поведения.

Программируя интерфейс, а не реализацию, вы включаете полиморфизм и получаете более гибкий код с более низкой связью. Например, этот метод может принимать любой экземпляр, который реализует IQuack:

public void DoSomething(IQuack quacker)
{
    // ...
}
2 голосов
/ 29 декабря 2010

Если вы разрабатываете продукт и знаете, что продукт будет взаимодействовать с типом устройства, услуги и т. Д., Но не обязательно с каким, вы можете использовать интерфейс для продвижения вперед в общей архитектуре, ПРЕДОСТАВЛЯЯ, что вы знаете достаточно о тех типах устройств, чтобы написать интерфейс, который может быть успешно использован любым данным устройством этого типа. Конечно, если вы находитесь на этапе проектирования, вам лучше иметь эти знания. Весьма распространено делать проекты высокого уровня, используя только объявления интерфейса. Я не говорю, хорошо это или плохо, но, похоже, это довольно распространенная практика для тех, кто использует программное обеспечение (например, Rose и т. Д.) Для создания скелета из UML.

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

Третье использование интерфейсов - сокращение дублирующегося кода. Это, пожалуй, единственное место, где люди увлекаются использованием интерфейса, и если бы это было не так, я бы сказал, не спрашивайте "Должен ли это быть интерфейс?" но «Может ли это быть интерфейсом?».

...