Будет ли абстрактный класс лучше интерфейса в следующем случае? - PullRequest
0 голосов
/ 31 марта 2011

У меня есть один интерфейс, который содержит четыре функции. У меня есть около 20 классов, которые реализуют этот интерфейс. В каждом классе я вижу много повторяющегося кода, например, в начале объявлены константы, которые есть в каждом классе. Реализации метода (логика) интерфейса в основном одинаковы. Он содержит повторяющиеся структуры. Это тот случай, когда я могу устранить много дублирующих классов, реализуя абстрактный интерфейс вместо интерфейса. То, к чему я стремлюсь, это слишком уметь помещать обычные методы из абстрактного класса в качестве неабстрактных методов, и тогда методы, которые нуждаются в собственной реализации, будут помечены как чрезмерно читаемые. Могу ли я поместить константы и структуры в абстрактные классы? Если это так, это устранит большое количество дублирующегося кода между классами. Есть ли что-то еще, на что я должен обратить внимание в классах как знак того, что мне, вероятно, следует использовать абстрактный класс вместо интерфейса.

Ответы [ 2 ]

2 голосов
/ 31 марта 2011

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

1 голос
/ 31 марта 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...