Похоже, довольно много людей пытались объяснить использование интерфейсов здесь, но почему-то я чувствую, что реальное использование интерфейсов здесь не отражено. Хотя это вполне объяснимо в любой книге по объектно-ориентированному анализу и проектированию, я изложу это своими словами ниже.
По моему мнению, одно из основных применений Интерфейсов - сделать возможной архитектуру плагинов. Что такое плагин? Плагин - это часть логики, которая расширяет функциональность базового приложения без необходимости перекомпиляции базового приложения. Короче говоря, кто-то определяет интерфейс один раз, а другие, которые пишут свой код для реализации этого интерфейса, могут вставить свой новый код в старое приложение, расширяя его по своему выбору.
Например, давайте возьмем популярный случай музыкального проигрывателя Winamp. Разработчики Winamp определили архитектуру, которая позволяет создавать плагины для различных вещей. Например, у вас может быть плагин, который записывает воспроизводимый в настоящее время MP3 в виде файла WAV. Или плагин «Virtual Surround», который берет обычный mp3 и делает его звучание намного лучше.
Здесь следует отметить, что разработчик Winamp мог и не предполагать, что его плеер может быть «расширен» для выполнения определенной задачи. Он бы просто определил все операции, которые могут быть выполнены плагином. Например, он мог определить интерфейс IMusicOperation, как показано ниже
public interface IMusicOperation
{
function Play():void;
function Pause():void;
function TrackSeekTo(offset:double):void;
}
Когда я, как разработчик плагинов, реализую этот интерфейс, он позволяет мне управлять Winamp любым удобным для меня способом. Например, у меня может быть веб-служба, которая позволяет кому-то управлять Winamp из удаленного местоположения.
Еще одна практическая аналогия, которую я считаю полезной, - это интерфейс для управления транспортным средством в игре.
public interface IDriveVehicle
{
function Start():void;
function Stop():void;
function TurnLeft():void;
function TurnRight():void;
}
Теперь, большая часть заключается в том, что если какой-либо автомобиль (будь то ракета, космический корабль, автомобиль, велосипед, лодка, подводная лодка) реализует этот интерфейс, мой игровой код может манипулировать этим транспортным средством без необходимости знать что-либо больше о нем. Самое приятное, что даже через несколько лет после того, как моя игра вышла на рынок, кто-то мог «добавить» новый космический корабль в мою игру, просто создав плагин, соответствующий моему интерфейсу IDriveVehicle.
Это также позволяет моему приложению загружать компоненты во время выполнения, которые поддерживают интерфейс, который я представил.
Для получения дополнительной информации это выглядит как хорошая ссылка ... http://www.cs.utah.edu/~germain/PPS/Topics/interfaces.html
Надеюсь, это поможет,