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

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

Solutions Collecting From Web of "методы конструктора в интерфейсах"

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

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

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

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

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

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

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

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

 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); } 

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

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

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

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

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