Interested Article - Интерфейс (шаблон проектирования)

Интерфейс ( англ. interface ) — основной шаблон проектирования (повторяемая архитектурная конструкция), являющийся общим методом для структурирования компьютерных программ для того, чтобы их было проще понять. В общем, интерфейс — это класс , который обеспечивает программисту простой или более программно-специфический способ доступа к другим классам.

Интерфейс может содержать набор объектов и обеспечивать простую, высокоуровневую функциональность для программиста (например, Шаблон Фасад ); он может обеспечивать более чистый или более специфический способ использования сложных классов (« класс-обёртка »); он может использоваться в качестве « клея » между двумя различными API ( Шаблон Адаптер ); и для многих других целей.

Другими типами интерфейсных шаблонов являются: Шаблон делегирования , Шаблон компоновщик , и Шаблон мост .

Примеры

C++

В противоположность Java (язык программирования) , где интерфейсы распространены, этот шаблон нечасто используется в C++. Однако, иногда, это может помочь сократить зависимости. Для библиотек, использующих классы-обёртки для скрытия деталей внутренней реализации, шаблон «интерфейс» может повысить читаемость кода.

Поскольку класс Facade является интерфейсом библиотеки, то его h-файл должен быть доступен пользователю библиотеки. Поэтому он должен быть помещён в include-каталог библиотеки. Но этот класс Facade возможно нуждается в некоторых свойствах других классов библиотеки. Поэтому его h-файл должен включать h-файлы других классов. Значит эти файлы также должны быть доступны, следовательно они также должны быть помещены в include-каталог библиотеки. А это нарушает стратегию определения только одних интерфейсов библиотеки в include-каталог. Эта трудность может быть решена использованием паттерна Interface.

Для реализации интерфейса к классу A требуется реализовать класс A_Interface , который будет определять публичные методы класса A как абстрактные функции. Класс A должен быть унаследован от класса A_Interface . Не забудьте объявить деструктор интерфейса A_Interface как виртуальный!

В таком случае заголовочный файл (h-файл) класса A может располагаться в source-каталогах библиотеки, в то время как заголовочный файл класса A_Interface останется в include-каталоге.

Поскольку интерфейсный класс является абстрактным и класс, реализующий интерфейс, неизвестен извне библиотеки, для создания объектов класса A требуется наличие фабрики (factory). Имеет смысл создать метод класса A_Interface , который будет работать как метод-фабрика (factory method).

См. также

Примечания

  1. СИМОНОВА О.Н. // СОВРЕМЕННЫЕ НАУКОЕМКИЕ ТЕХНОЛОГИИ. — 2014. — Т. 1 , № 5-2 . — С. 96 .
  2. Хусаинов И.Г. // ХРОНИКИ ОБЪЕДИНЕННОГО ФОНДА ЭЛЕКТРОННЫХ РЕСУРСОВ НАУКА И ОБРАЗОВАНИЕ. — 2014. — Т. 1 , № 12 . — С. 43 .

Литература

Источник —

Same as Интерфейс (шаблон проектирования)