Интерфейс (шаблон проектирования)
Интерфейс | |
---|---|
Interface | |
Описан в Design Patterns | Нет |
Интерфейс (англ. interface) — основной шаблон проектирования [1](повторяемая архитектурная конструкция), являющийся общим методом для структурирования компьютерных программ для того, чтобы их было проще понять. В общем, интерфейс — это класс, который обеспечивает программисту простой или более программно-специфический способ доступа к другим классам.
Интерфейс может содержать набор объектов и обеспечивать простую, высокоуровневую функциональность для программиста (например, Шаблон Фасад); он может обеспечивать более чистый или более специфический способ использования сложных классов («класс-обёртка»); он может использоваться в качестве «клея» между двумя различными API (Шаблон Адаптер); и для многих других целей.
Другими типами интерфейсных шаблонов являются: Шаблон делегирования, Шаблон компоновщик, и Шаблон мост.
Примеры
[править | править код]В противоположность Java (язык программирования)[2], где интерфейсы распространены, этот шаблон нечасто используется в 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).
См. также
[править | править код]Примечания
[править | править код]- ↑ СИМОНОВА О.Н. ШАБЛОН ПРОЕКТИРОВАНИЯ MVC КАК ЭФФЕКТИВНОЕ СРЕДСТВО ПОСТРОЕНИЯ АРХИТЕКТУРЫ ПРОГРАММНОЙ СИСТЕМЫ // СОВРЕМЕННЫЕ НАУКОЕМКИЕ ТЕХНОЛОГИИ. — 2014. — Т. 1, № 5-2. — С. 96.
- ↑ Хусаинов И.Г. ЯЗЫК ПРОГРАММИРОВАНИЯ JAVA / // ХРОНИКИ ОБЪЕДИНЕННОГО ФОНДА ЭЛЕКТРОННЫХ РЕСУРСОВ НАУКА И ОБРАЗОВАНИЕ. — 2014. — Т. 1, № 12. — С. 43.
Литература
[править | править код]Это заготовка статьи по информатике. Помогите Википедии, дополнив её. |