- Интерфейс (шаблон проектирования)
-
Шаблон проектирования Интерфейс Interface Описан в Design Patterns Нет
В информатике, шаблон интерфейса не является особым шаблоном среди шаблонов проектирования. Он является общим методом для структурирования компьютерных программ для того, чтобы их было проще понять. В общем, интерфейс — это класс, который обеспечивает программисту простой или более программно-специфический способ доступа к другим классам.
Интерфейс может содержать набор объектов и обеспечивать простую, высокоуровневую функциональность для программиста (например, Шаблон Фасад); он может обеспечивать более чистый или более специфический способ использования сложных классов («класс-обёртка»); он может использоваться в качестве «клея» между двумя различными 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).class A_Interface { public: static A_Interface* create_A(); virtual ~A_Interface() {} virtual void do_something() = 0; };
class A : public A_Interface { public: void do_something(); };
C#
interface IInterface { object Param11 { get; set; } }
VB.NET
Interface IInterface Property Param1() As Object End Interface
См. также
Литература
Шаблоны проектирования Основные Делегирования • Интерфейс • Неизменяемый объект • Функционального дизайна
Порождающие Структурные Поведенческие Интерпретатор • Итератор • Команда • Наблюдатель • Посетитель • Посредник • Состояние • Стратегия • Хранитель • Цепочка обязанностей • Шаблонный метод
Блокировка с двойной проверкой • Однопоточное выполнение • Планировщик Категории:- Шаблоны проектирования
- API
Wikimedia Foundation. 2010.