Что лучше: интерфейс или игра с публичным / защищенным? - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть класс с 5 методами. 3 из этих методов просто должны быть открыты другими классами в том же пакете, а 2 должны быть открыты другими классами в другом пакете.

как пример:

void setTimeArray(int[] zeitArray) {
    this.timeArray = timeArray ;
}

public int[] getTimeArray() {
    return timeArray ;
}

теперь мне было интересно, что я должен сделать:

  • я должен сделать 3 метода protected и 2 других public?
    или
  • я должен сделать интерфейс для 2 методов?

так что будет чище и лучше для производительности моего приложения и почему?

Ответы [ 4 ]

2 голосов
/ 14 сентября 2011

Вы, похоже, не уверены в использовании public, protected и т. Д. Публичные методы в вашем классе составляют открытый интерфейс вашего класса. Разрабатывая свой класс, вы решаете, какую функциональность вы хотите показать потребителям вашего класса.

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

Вам не нужно создавать интерфейс, если нет нескольких конкретных классов, реализующих этот интерфейс.

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

2 голосов
/ 14 сентября 2011

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

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

2 голосов
/ 14 сентября 2011

Если существует один «субъект», который является общим для двух методов, но не для остальных трех, рассмотрите возможность разделения класса на 2 различных класса.Если вы это сделаете, рассмотрите возможность перемещения класса с двумя методами в пакет, в котором он будет использоваться (если это имеет смысл с точки зрения «субъекта» этого пакета).

В любом случае используйтеминимальная видимость, позволяющая вам делать то, что вы хотите.

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

1 голос
/ 14 сентября 2011

Вы должны написать интерфейс, как только вы думаете, что он может вам понадобиться или понадобиться;)

В дополнение к интерфейсу: сохранение неинтерфейсных методов protected является правильным решением дляпроблема.

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

...