когда нам нужен Шаблон "адаптер"?

Когда мы должны пойти для Шаблона "адаптер"? Если возможно дайте мне пример реального мира, который удовлетворяет тому шаблону...

23
задан Federico klez Culloca 13 August 2010 в 15:16
поделиться

2 ответа

Я работал над системой, которая должна была взаимодействовать с внешними DVR. По большей части, все DVR имеют одинаковые базовые функции: начать запись с определенного источника видео; остановить запись; начать воспроизведение с определенного времени; остановить воспроизведение и т.д.

Каждый производитель DVR предоставил библиотеку программного обеспечения, позволяющую нам писать код для управления их устройством (в рамках данного обсуждения я буду называть ее SDK). Несмотря на то, что каждый SDK предоставлял API для всех основных функций, ни один из них не был совершенно одинаковым. Вот очень грубый пример, но вы уловили идею:

  • BeginPlayback(DateTime startTime);
  • StartPlayback(long startTimeTicks);
  • Playback(string startDate, string startTime);

Наше программное обеспечение должно было уметь взаимодействовать со всеми DVR. Поэтому вместо того, чтобы писать ужасные переключатели/кейсы для каждого SDK, мы создали свой общий интерфейс IDVRController и написали весь код нашей системы под этот интерфейс:

  • Playback(DateTime startTime);

Затем мы написали свою реализацию адаптера для каждого SDK, все из которых реализовали наш интерфейс IDVRController. Мы использовали конфигурационный файл для указания типа DVR, к которому будет подключаться система, и шаблон Factory для инстанцирования правильного реализатора IDVRController для этого DVR.

Таким образом, паттерн адаптера упростил код нашей системы: мы всегда кодировали под IDVRController. И это позволило нам развернуть адаптеры для новых SDK после развертывания (наш Factory использовал отражение для инстанцирования правильного экземпляра IDVRController).

44
ответ дан 29 November 2019 в 01:16
поделиться

В компьютерном программировании адаптер (часто называемый шаблон обертки или просто обертка) это шаблон проектирования, который переводит один интерфейс для класса в совместимый интерфейс. Адаптер позволяет классам работать вместе, которые обычно не могут работать вместе из-за несовместимых интерфейсов, предоставляя свой интерфейс клиентам, при этом используя оригинальный интерфейс. Адаптер преобразует вызовы своего интерфейса в вызовы к оригинальному интерфейсу, и объем кода, необходимого для этого обычно невелик. Адаптер также отвечает за преобразование данных в соответствующие формы. Для например, если несколько булевых значений хранятся как одно целое число, но ваш потребитель требует 'true'/'false', адаптер будет отвечает за извлечение соответствующие значения из целого числа значение.

alt text

Wikipedia!!!

4
ответ дан 29 November 2019 в 01:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: