количество методов в интерфейсе

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

например, я лично ненавижу интерфейс с 20 методами. Это просто сложно реализовать. Контракт, кажется, трудно поддерживать. Аналогично, если количество методов равно 1. Это заставляет меня задуматься, действительно ли это хорошая абстракция.

какие мысли ?

11 ответов


интерфейс должен иметь ровно столько методов, сколько необходимо. Примеры:

java.lang.Iterable - 1 способ
java.lang.Comparable - 1 способ
java.util.Collection - 14 методов
java.util.List - 25 способов (в том числе из коллекции)

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


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

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


ну интерфейсы с одним методом обычно имеют свою цель, и вы можете реализовать их анонимно более легко. Мое эмпирическое правило -столько методов, сколько нужно. Но многие методы в одном интерфейсе обычно предполагают, что вы можете разделить его на несколько других интерфейсов, особенно когда это влияет на разные области задач (например, UserLoginAndAdministrationInterface становится одним UserLogin и одним интерфейсом UserAdministration). Вы можете реализовать столько интерфейсов, сколько вы хотите в классе, и они тоже могут быть подклассами. Так что делить их совсем не больно.


меня больше беспокоит, что интерфейс логически последователен, чем имеет некоторое произвольное оптимальное количество методов. Тем не менее, большое количество методов может означать "Бог" - объект, который должен быть переработан. Более четкое указание на то, что методы не являются последовательными, но количество методов может быть легче наблюдать и привести вас к более тщательному изучению. Иногда, однако, вам просто нужно иметь много методов, потому что есть много возможных операций, которые вы хотели бы сделать на объектах такого типа. Примером этого может быть что-то вроде IEnumerable<T> in .Сеть. Я не могу придумать никакой веской причины для разбиения их на отдельные интерфейсы, но в интерфейсе есть много методов.


интерфейс должен иметь ровно столько, сколько методов как должен.

Если это число большое, обоснование должно быть тщательно рассмотрено, но может быть действительным.

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


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

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

для кода, читаемого людьми, правила не могут заменить суждение.



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

однако я бы подумал, что интерфейс, который имел более 8-10 методов, будет возможным дымом кода - просто то, что потребует 5 секунд для исследования.


способ справиться со многими методами, когда вам нужно только реализовать несколько, это Abstract классы, которые предоставляют реализации по умолчанию или throw NotImplementedException. Если есть только один метод, то это, вероятно, нормально, потому что есть методы, которые ожидают только один Iterface и вызывают этот один метод. Существует множество шаблонов, например, Vistor, для которых нужен только один метод.


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


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