Подтвердить что ты не робот

Методы конструктора в интерфейсах

Являются ли методы конструктора в интерфейсах плохими?

4b9b3361

Ответ 1

Почему люди думают, что кто-то хочет создать экземпляр интерфейса?

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

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

Ответ 2

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

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

Ответ 3

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

Я бы не подумал, что это странно делать что-то вроде:

interface IDBConnection
{
    function __construct( $connectionString );
    function executeNonQuery( $commandText, $paramters=null);
    function executeScalar( $commandText, $paramters=null);
    function executeSingle( $commandText, $paramters=null);
    function executeArray( $commandText, $paramters=null);
}

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

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

Я не видел этого, но я бы не подумал, что это странно или плохо.

Ответ 4

Хотя интерфейсы не могут иметь конструкторы в большинстве языков, Factory pattern предоставляет контракт на создание объектов, аналогичный интерфейсу, Взгляните на это.

Ответ 5

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

Тем не менее, я лично не считаю, что конструктор объекта является частью этого объектного интерфейса, и поэтому добавление конструктора к интерфейсу будет препятствовать естественной гибкости, доступной для интерфейса.