Интернет магазин китайских планшетных компьютеров



Компьютеры - Интерфейс (шаблон проектирования)

30 марта 2011





В информатике, это класс, который обеспечивает программисту простой или более программно-специфический способ доступа к другим классам.

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

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

Примеры

C++

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

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

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

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

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

class A_Interface
{
 public:
  static A_Interface* create_A;
  virtual ~A_Interface {}
  virtual do_something = 0;
};

class A : public A_Interface
{
 public:
  do_something;
};

C#

interface IInterface
{
 object Param1 { get; set; }
}

VB.NET

   Interface IInterface
        Property Param1 As Object
   End Interface



Просмотров: 645


<<< Интерпретатор (шаблон проектирования)
Итератор (шаблон проектирования) >>>