Как понять интерфейсы — серия Java

Java
Как понять интерфейсы — серия Java

Структура каталогов

  • предисловие
  • Что такое интерфейс?
  • Как объявить интерфейс?
  • Роль интерфейса?
  • Когда бы вы подумали об использовании интерфейса?
  • Когда я могу рассмотреть возможность использования интерфейса?
  • Платформа онлайн-интерфейса Документация
  • Суммировать

предисловие

Сегодня коллега спрашивал как разобраться в интерфейсе.Я просто пошел покушать после работы в полдень,и разговаривал на ходу,но так и не дошел до сути.Вот и хочу поделиться своим пониманием интерфейса через эту статью. Чтение занимает 2 минуты.

Что такое интерфейс?

Объекты определяют свое поведение при взаимодействии с внешним миром через предоставляемые ими методы, а методы формируют интерфейс для взаимодействия с внешним миром.интерфейс. например, телевидениекнопка переключенияэто интерфейс между вами и проводами на другой стороне пластикового корпуса, вы просто нажимаетевыключательС помощью этой кнопки вы можете управлять включением и выключением телевизора, и вам не нужно обращать внимание на детали включения и выключения телевизора Интерфейс позволяет вам знать, что он делает, не зная, как они сделай это;Более глубокое понимание интерфейса заключается в отделении определения (спецификации и ограничений) от реализации (конкретной логики кода), и это абстракция посредника (конкретная реализация) связи (взаимодействия)..

Как объявить интерфейс?

public inteface TV {

    // 开机
    public void open();
    
    // 关机
    public void close();
    
    // 选择频道
    public void selectChannel(Integer channel);
    
    // 设置声音大小
    public void setVolume(Integer vlume);
    
    ...
}

Выше объявляется интерфейс телевизора (интерфейс языка программирования), предоставляет 4 метода (Интерфейс для взаимодействия с внешним миром), читая эти методики, можно примерно смоделировать в уме телевизор, и узнать, на что способен телевизор, чтобы все пришли к единому мнению, какие функции будут у телевизора; а как быть с функциями телевизора ( запуск, выключение, выбор каналов, настройка громкости)? Оставьте это другим производителям телевизоров.

// 小米电视
public inteface MiTV extends TV {
    // 扩展玩游戏接口
    public void playGame(String gameId);
}

public class MiTVImpl implements MiTV {

    @Overide
    pubilc void open() {
        // TODO 小米对开机的实现
    }
    
    @Overide
    public void close() {
        // TODO 小米对关机的实现
    }
    
    @Overide
    public void selectChannel(Integer channel) {
        // TODO 小米对选择频道的实现
    }
    
    @Overide
    public void setVolume() {
        // TODO 小米对声音大小控制的实现
    }
    
    // 扩展玩游戏接口
    @Overide
    public void playGame(String gameId) {
        // TODO 对游戏的实现
    }
}

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

Роль интерфейса?

  1. Интерфейс — это дизайн: на уровне дизайна интерфейс может помешать нам слишком много думать о деталях и позволить нам лучше оценить систему с более высокой точки зрения, например, является ли дизайн взаимодействия системы разумным и отсутствует ли функция, выполнима ли она, слишком сложна ли она и т. д.
  2. Интерфейс — это контракт: на уровне кодирования интерфейс может четко сказать разработчикам, как его использовать (семантика интерфейса, что нужно на вход, а что на выход), а разработчикам нужно только реализовать конкретные функциональные коды. по этим условностям..
  3. Унифицировать общее поведение классов: интерфейсы используются для унификации общего поведения классов.Когда разным классам необходимо обмениваться информацией, нет необходимости создавать отношения между классами. Например, человек (Human) и попугай (Parrot) оба свистят (свистят), но Human и Parrot не должны быть подклассами Whistler, лучше всего сделать их подклассами Animal, и их интерфейс Whistler можно использовать для общаться.
// 吹口哨
public inteface Whistler {
    /**
     * 吹口哨
     */
    public void whistle();
}

public class JuniorWhistler implements Whistler {
    public void whistle() {
        System.out.println("入门级口哨声");
    }
}

public class SeniorWhistler implements Whistler {
    public void whistle() {
        System.out.println("高级口哨声");
    }
}

// 定义动物接口
public inteface Animal {
    /**
     * 吹口哨
     *
     * @param whistle
     * @return
     */
    public void whistle(Whistler whistle);
}

public class Human implements Animal {
    
    public void whistle(Whistler whistle) {
        whistle.whistle();
    }
    ...
}

public class Parrot implements Animal {

    public void whistle(Whistler whistle) {
        whistle.whistle();
    }
    ...
}

public class Demo {
    public static void main(String[] args) {
        // 人吹口哨
        Human human = new Human();
        human.whistle(new JuniorWhistler());  // 入门级口哨声
        
        // 鹦鹉口哨
        Human human = new Human();
        human.whistle(new SeniorWhistler()); // 高级口哨声
    }
}
  1. Вам не нужно знать класс реализации при его использовании: когда у интерфейса есть класс реализации, вам не нужно знать, каков его класс реализации при его использовании (вы можете узнать об этом, если вам интереснополиморфизм,внедрение зависимости). Например, если вещь влияет на других людей из-за свистящего шума, другим людям не обязательно знать, является ли источник шума человеком или попугаем, потому что они могут быть уверены, что свистящая вещь свистит. В качестве более практического примера алгоритм сортировки может ожидать, что типы объектов будут сопоставимы, поэтому ему нужно только знать, что типы объектов могут быть отсортированы определенным образом, независимо от типа объектов. wistler.whistle() вызовет метод реализации объекта whistle, не зная, какой класс объект реализует Whistler.
public inteface Whistler {
    public void whistle();
}

public class Human implements Animal {
    
    public void whistle(Whistler whistle) {
        whistle.whistle();
    }
    ...
}

Humanв классеwhistle()реализация методаwhistle.whistle()Не обязательно знать, какой конкретно класс реализации свистка, иwhistle(Whistler whistle)Метод касается только того, что входной параметр имеет тип Whistler. О том, как в Java реализованы методы, динамически привязанные к конкретным классам реализации, после этого будет написана отдельная статья.

Когда бы вы подумали об использовании интерфейса?

Хотя это трудно определить (даже несмотря на то, что многие люди используют интерфейсно-ориентированное программирование), я все же говорю об этом, основываясь на собственном опыте разработки.

  1. Когда проект не имеет хорошего спецификации разработки, документ API еще не установлен, проект крепко, когда в группе проекта есть много новых людей, необходимо использовать интерфейс, и определение этого интерфейса должно быть определено Люди, которые знают больше о бизнесе и проектах. Таким образом, он может строго договориться о входе и выпуске интерфейса, имени интерфейса и имени параметра, и не будет хаотичным, а новичком нужно только для записи соответствующих Реализация, поэтому, когда она реконструирована, это не приведет к каждому, когда странная виновата состоит в том, чтобы изменить интерфейс, как только интерфейс изменен, возможность проблем будет больше (эта яма окончена, особенно если нет единицы тест на регрессионный тест).
  2. Когда необходимо использовать режим стратегии, его следует реализовать на основе интерфейса, например конвертации валюты в разных странах.
  3. Когда функция платформы очень удобна для расширения системы на основе дизайна интерфейса, следует использовать интерфейс, такой как внедрение зависимостей, В это время интерфейс может сделать систему более расширяемой и более совместимой.Принцип открытия-закрытия.
  4. В соответствии с концепцией SOA открытая служба должна быть интерфейсом — это строго указано в Руководстве Ali по разработке спецификаций Java.

Когда я не могу рассмотреть возможность использования интерфейса?

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

Платформа документации онлайн-интерфейса

Некоторые рекомендуемые онлайн-платформы управления APISwagger Editor,eolinker

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

Суммировать

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